2017-01-11 2 views
0

私は別のファイルからインポートしています機能を持っています。そして、sinon.spy返す関数が呼び出されるにもかかわらず、輸入の機能上の偽

import { getMenu } from '../utils/request'; 

私が欲しいこの関数を呼び出す方法を持っています私はgetMenu方法からいくつかのコンソール出力を取得し、

it('handleDateChange should call getMenu when NOT passed state date',()=> { 
    const dashboard = shallow(<Dashboard/>); 
    const today = new Date(); 

    var spy = sinon.spy(getMenu); 

    dashboard.setState({ selectedDate: 'blah' }); 

    dashboard.instance().handleDateChange(today); 
    expect(spy.called).toBe(true); 
    }); 

面白いことがあるので、私は、メソッドが呼び出された知っている:テストに(私はこの方法が本当にこの関数を呼び出すことをテストしたいです)。

しかし、spy.calledはまだfalseを返します。

私は間違っていますか?

答えて

1

問題は、このモジュールがインポートされたときに他の場所に影響することがあるsinonモジュールでモックを詰まらせることができないことです。だからあなたは、あなたのテストでインポートされた関数について詮索しているだけです。 jestを使用するときの解決方法は、モジュールを模擬してテストでインポートすることです。

import { getMenu } from '../utils/request'; 

jest.mock('../utils/request',() => ({getMenu: jest.fn()})) 

it('handleDateChange should call getMenu when NOT passed state date',()=> { 
    const dashboard = shallow(<Dashboard/>); 
    const today = new Date(); 

    dashboard.setState({ selectedDate: 'blah' }); 

    dashboard.instance().handleDateChange(today); 
    expect(getMenu).toHaveBeenCalled(); 
}); 

だから最初、私たちはgetMenuは冗談スパイであるように、我々はそれをモック、モジュールをインポートします。テストが実行されるときに、すべてのインポート処理が行われる前にjest.mock呼び出しが呼び出されるため、テストするモジュールとテストするモジュールでは、requestモジュールはスパイであるgetMenuという単なるオブジェクトです。テストでモジュールをインポートすることで、それが呼び出されたことをテストすることができます。

関連する問題