2015-12-06 6 views
14

Ich arbeite an einer Redux-App & versucht, einen Spion mit Jasmine auf einer ES6-Standard exportierten Funktion zu erstellen. Ich habe ein paar verschiedene Arten versucht, die Funktion ausspionieren zu lassen, einschließlich eines Wildcard-Imports, um auf die 'Standard'-Eigenschaft des Imports zuzugreifen, aber nichts, was ich versucht habe, hat bisher funktioniert. Unten ist ein Beispiel, wo ich widgets.js testen und die Widget-Funktion ausspionieren möchte. Gibt es eine Möglichkeit, dies zu erreichen, ohne die Art zu ändern, wie die Funktion von widget.js exportiert wird?Wie verwende ich Jasmine, um eine Funktion auszuspionieren, die über einen ES6-Standardexport importiert wird?

widget.js

import { Map } from 'immutable'; 
import { CREATE_WIDGET } from 'actions'; 

const initialState = Map({ 
    id: undefined, 
    name: undefined 
}); 

export default function widget(state=initialState, action) { 
    switch (action.type) { 
    case CREATE_WIDGET: 
     return state.update((widget) => widget.merge(action.widget)); 

    default: 
     return state; 
    } 
} 

widgets.js

import { OrderedMap } from 'immutable'; 
import { CREATE_ROOM } from 'actions'; 
import widget from './widget'; 

const initialState = OrderedMap(); 

export default function widgets(state=initialState, action={}) { 
    switch (action.type) { 
    case CREATE_ROOM: 
     return state.set(action.widget.id, widget(undefined, action)); 

    default: 
     return state; 
    } 
} 
+0

Haben Sie eine Art und Weise zu tun, was Sie mit einer benannten Export zu tun? Sie sind eigentlich nicht so anders. – Bergi

+0

Nein, tue ich nicht. Ich wurde über dieses Plugin informiert, konnte es jedoch nicht richtig laufen lassen und fühle mich, als ob ich die Funktion nur als Methode für ein Objekt exportieren müsste. – evkline

Antwort

19

Sie sagen, Sie versucht, den Platzhalter und Ausspionieren von Standard-Import? Was war das Problem bei diesem Ansatz? Ich lief in dieses Problem und hierdurch beseitigt es für mich:

import * as widget from './widget'; 

describe('widget spec',() => { 
    beforeEach(() => { 
     spyOn(widget, 'default'); 
    }); 
}); 
+0

das Problem damit ist, dass Sie die Fähigkeit zu Baum-Shaking auftreten, wenn Sie bauen. Sie möchten so optimiert wie möglich sein, indem Sie nur das Teil importieren, das Sie tatsächlich verwenden. –

+0

ist es nicht wirklich wichtig, da der Produktionscode sowieso keine Testdateien enthalten sollte –

Verwandte Themen