2015-11-23 6 views
5

Hat jemand Jasmin/Jest-Tests mit der es2015-Syntax geschrieben? Wie viel shimming/polyfill/gerrymandering benötigt es?babel-jest ES2015 Importanweisungen

Ich habe Probleme beim Importieren von Funktionen richtig. Ich habe ein Modul. .../utils/TweetUtils.js

'use strict'; 

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

und eine Test-Suite:

... ./__ Tests __/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(); 
    }); 
}); 

Wenn ich eine Konsole Ausgabe in die Suite mit etwas wie folgt hacken: expect(‘’).toBe(TweetUtils);

Jasmin meldet dies:

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

So scheint es, wie die Import-Anweisung etwas tut, aber es ist eindeutig nicht meine Methoden ehrlich zu importieren. Ich erhalte die gleichen Ergebnisse, wenn ich die benannte Funktion Syntax importieren mit: import {getListOfTweetIds} from ‘../TweetUtils’; Aber wenn ich die Standard-Syntax verwenden: import getListOfTweetIds from ‘../TweetUtils’; Die zweite spec versagt - es ist nicht mehr typeof function, aber typeof object // => {default: Function}

Ich habe die Dokumentation wurde Kämme und offene Punkte. Es gibt seit ein paar Monaten ähnliche Probleme, aber die bekannten Probleme scheinen nicht richtig zu sein. Ich habe versucht, meine jest.dontMock Anweisungen zu importieren, um zu vermeiden, zu hissen, circa: https://github.com/babel/babel-jest/issues/16, aber keine Würfel.

Alles funktioniert, wenn ich TweetUtils.js ändernmodule.exports = function… zu verwenden und sie in die Suite bringen const myFunction = require(‘../TweetUtils’) verwenden, aber es fühlt sich nicht wie ich die wahre ES2015 Magie kanalisieren bin. Beschäftigen sich gerade alle gerade mit wackeligen Workarounds, während das Ökosystem die neue Syntax einholt?

Antwort

4

Wie Sie sagen, import Aussagen hochgezogen werden und es verursacht Probleme mit der Scherz Auto-spöttische Funktion (das Modul importiert vor Sie Scherz sagen es unmocked).

TweetUtils.getListOfTweetIds ist korrekt importiert, aber es ist verspottet, so ruft jeder Anruf zurück undefined. Deshalb scheitert die dritte Erwartung.

importieren jest.dontMock Anweisung arbeiten kann (ich es getestet), aber es klingt für mich schmutzig (tun Sie wirklich eine „dontmock Modul“ Datei für jede Testmodule erstellen?)

Sie haben die require Syntax verwenden für das getestete Modul. Ersetzen

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

von

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

Es war das gleiche im Scherz Beispiel, bevor ich es fest: jest#379

+0

In meinem Fall nur funktioniert, wenn ich hinzugefügt .default: 'const TweetUtils = erfordern ('../ TweetUtils'). Standard; ' – vitalets