2015-12-06 5 views
14

Pracuję nad aplikacją Redux & próbując utworzyć szpiega używając Jasmine na domyślnej wyeksportowanej funkcji ES6. Podjąłem kilka prób szpiegowania tej funkcji, w tym za pomocą importu wieloznacznego, aby uzyskać dostęp do "domyślnej" właściwości importu, ale nic, co wypróbowałem, nie zadziałało do tej pory. Poniżej znajduje się przykład, w którym chciałbym przetestować widgets.js i szpiegować funkcję widżetu. Czy istnieje sposób, aby to osiągnąć bez konieczności zmiany sposobu eksportowania funkcji z widget.js?Jak używać Jasmine do szpiegowania funkcji importowanej za pomocą domyślnego eksportu ES6?

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

Czy masz sposób robienia tego, co chcesz zrobić z nazwanym eksportem? W rzeczywistości nie są aż tak różne. – Bergi

+0

Nie, nie mam. Powiedziano mi o tej wtyczce, jednak nie byłem w stanie jej poprawnie uruchomić i mam wrażenie, że mogę wyeksportować funkcję jako metodę do obiektu. – evkline

Odpowiedz

19

Mówisz Próbowałem importowanie wieloznaczny i szpiegostwo na domyślne? Jaki był problem z tym podejściem? Właśnie wpadłem na ten problem i rozwiązałem go dla mnie:

import * as widget from './widget'; 

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

Problem polega na tym, że usuwasz możliwość wstrząsania drzewem podczas budowania. Chcesz być tak zoptymalizowany, jak tylko możesz, po prostu importując część, której faktycznie używasz. –

+0

To nie ma znaczenia, ponieważ kod produkcyjny nie powinien zawierać plików testowych –

Powiązane problemy