2015-12-06 9 views
14

私は、Reduxアプリケーション&で、ES6のデフォルトエクスポート機能でJasmineを使用してスパイを作成しようとしています。私はワイルドカードのインポートを使ってインポートの 'デフォルト'プロパティにアクセスすることを含むいくつかの異なる方法で関数を偵察しようとしましたが、これまでに何も試したことはありませんでした。以下は、私がwidgets.jsをテストし、ウィジェット機能についてスパイしたい場合の例です。関数をエクスポートする方法を変更せずにこれを達成する方法はありますか?widget.jsJasmineを使用して、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

あなたは名前付きエクスポートで何をしたいのですか?実際にはそれほど違いはありません。 – Bergi

+0

いいえ、私はしません。私はこのプラグインについて言われましたが、正しく動作させることができず、オブジェクトのメソッドとして関数をエクスポートする必要があるかもしれないと感じました。 – evkline

答えて

19

あなたはデフォルトのワイルドカードとスパイをインポートしようとしたと言いますか?そのアプローチの問題点は何ですか?私はちょうどこの問題に遭遇し、これを私のために解決しました:

import * as widget from './widget'; 

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

この問題はビルド時にツリーシェイキングが発生するのを防ぐことです。実際に使用している部品をインポートするだけで、できるだけ最適化したいと考えています。 –

+0

プロダクションコードにテストファイルを含めないでください –

関連する問題