2017-07-17 7 views
0

私は現在、反応サービス(redux-sagaを使用している)の1つでJestのユニットテストを行っています。これらのサービスは、このサービスに固有の他のAPI、セレクタ、およびアクション以外のAPI、セレクタ、およびアクションを呼び出します。Jestとの反応に関するユニットテスト:異なる機能からアクションをモックする方法は?

は、したがって、これらの外側API、セレクタ、およびアクションを模擬するために、私はこのように私のテストファイルでそれらをあざけりために冗談を使用:

// API mock example 
jest.mock('../otherFeatureService/api'),() => { 
    return { myApi: jest.fn() }; 
} 

// reducer mock example 
jest.mock('../otherFeatureService/reducer'),() => { 
    return { isConnected: (fake) => jest.fn(fake) }; 
} 

// API action example 
jest.mock('../otherFeatureService/actions'),() => { 
    return { myAction:() => jest.fn() }; 
} 

すべてはモックアクションを除いて、私のテストでは正常に動作します。 しかし、私は私が私のモックアクションのために得たものと私の期待される結果を比較してみました、以下のメッセージが表示されました:

expect(received).toEqual(expected) 

Expected value to equal: 
    {"@@redux-saga/IO": true, "PUT": {"action": [Function mockConstructor], "channel": null}} 
Received: 
    {"@@redux-saga/IO": true, "PUT": {"action": [Function mockConstructor], "channel": null}} 

Difference: 

Compared values have no visual difference. 

あなたはそれがアクションにのみ動作しない理由についてどんな考えを持っていますか? (私はテストのために 'redux-saga-testing'からsagaHelperを使用しています)

ありがとう。 printfx000。

+0

一般に、ES関数は等価なコードと名前を持っていても、等しくはありません。あなたのケースでは、実際にはアクションが呼び出されないので、テストのいくつかの場所では、アクション関数を直接渡しますが、結果を渡す必要があります。これは単純な直列化可能オブジェクトです。 –

答えて

0

jestは2つの匿名機能の違いを生むことができないため、この問題が発生しています。 これを修正するには、あなたが名前を付けた関数を提供する必要があります。 jestホイスト宣言があるので、の内部にという名前の関数を宣言する必要があります。

jest.mock('../selectors',() => { 

    function mockedMakeSelectCoverageResult() {} 

    return ({ 
     makeSelectCoverageResult:() => mockedMakeSelectCoverageResult, 
    }); 

}); 

expect(descriptor).toEqual(select(makeSelectCoverageResult())); 
関連する問題