2015-11-23 26 views
5

ktoś napisał testy jasmine/jest przy użyciu składni es2015? ile potrzebuje shimming/polyfill/gerrymandering?babel-jest ES2015 oświadczenia importowe

Mam problemy z prawidłowym importowaniem funkcji. Mam jeden moduł. .../utils/TweetUtils.js

'use strict'; 

export function getListOfTweetIds (tweets) { 
    return Object.keys(tweets); 
}; 

i jeden test suite:

... ./__ testy __/TweetUtils-test.js

'use strict'; 
jest.dontMock('../TweetUtils'); 
import * as TweetUtils from '../TweetUtils'; 

describe('Tweet utilities module',() => { 

    it('has access to the TweetUtils methods',() => { 

    let testObj = {a:'a',b:'b',c:'c'}; 
    // Passes 
    expect(TweetUtils.getListOfTweetIds).toBeDefined(); 
    // Passes 
    expect(typeof TweetUtils.getListOfTweetIds).toBe('function'); 
    // Fails 
    expect(TweetUtils.getListOfTweetIds(testObj)).toBeTruthy(); 
    }); 
}); 

Jeśli zhakuję wyjście konsoli do pakietu z czymś takim: expect(‘’).toBe(TweetUtils);

Jasmine raporty to:

- Expected: '' toBe: { 
     default: { 
      getListOfTweetIds: Function 
     }, 
     getListOfTweetIds: Function 
    } 

Więc wydaje się, że instrukcja import coś robi, ale to zdecydowanie nie jest moje metody importowania uczciwie. I uzyskać takie same wyniki przy importować za pomocą funkcji nazwanej składnię: import {getListOfTweetIds} from ‘../TweetUtils’; Ale jeśli mogę użyć domyślnego składnię: import getListOfTweetIds from ‘../TweetUtils’; Druga specyfikacja nie - to już nie typeof function, ale typeof object // => {default: Function}

Byłem czesanie docs i otwarte kwestie. Przez kilka miesięcy występowały pokrewne problemy, ale znane problemy nie wyglądają dobrze. Próbowałem zaimportować moje dowody jest.dontMock, aby uniknąć podnoszenia, około: https://github.com/babel/babel-jest/issues/16, ale bez kości.

Wszystko działa gdybym modyfikować TweetUtils.js wykorzystania module.exports = function… i dostosowania go do pakietu, używając const myFunction = require(‘../TweetUtils’), ale nie czuję, że kierowanie prawdziwą ES2015 magii. Czy wszyscy teraz mają do czynienia z nieporęcznymi robotami, a ekosystem przyzwyczaja się do nowej składni?

Odpowiedz

4

Jak powiedział import oświadczenia są wydobywanych i to powoduje problemy z żartem funkcji auto-szyderczy (moduł jest importowany Państwo przed powiedzieć żart, żeby go unmocked).

TweetUtils.getListOfTweetIds zostało poprawnie zaimportowane, ale jest wyśmiewane, więc każde połączenie zwraca undefined. Właśnie dlatego trzecie oczekiwanie zawodzi.

Importowanie jest.dontMock oświadczenie może działać (ja testowałem to), ale brzmi to brudny do mnie (czy naprawdę chcesz stworzyć „moduł dontmock” plik dla każdego modułów testowych?)

Musisz użyć składni require dla testowanego modułu. Wymienić

import * as TweetUtils from '../TweetUtils'; 

przez

const TweetUtils = require('../TweetUtils'); 

Tak samo było w żartach przykład przed Naprawiłem go: jest#379

+0

W moim przypadku to tylko pracował kiedy dodałem .DEFAULT: 'const TweetUtils = require ("../ TweetUtils") domyślnie; ' – vitalets