2017-09-22 15 views
2

私はReduxアクションを持っています。それ自体は2つのアクションをディスパッチします。各アクションは、インポートされた関数から取得されます。 1つはローカルモジュールからのもので、もう1つは外部ライブラリからのものです。私のテストでSinonを使用して関数をスタブすることができません

import { functionA } from './moduleA'; 
import { functionB } from 'libraryB'; 

export function myAction() { 
    return (dispatch) => { 
    dispatch(functionA()); 
    ... 
    dispatch(functionB()); 
    } 
} 

私は機能をスタブにしsinonサンドボックスを使用していますが、2つだけのテストに合格。私は3つすべてを通過すると思っています。

import * as A from './moduleA'; 
import * as B from 'libraryB'; 

describe(__filename, async() => { 
    it('Calls 2 other actions',() => { 
    sandbox = sinon.sandbox.create(); 

    const dispatch = sandbox.stub(); 

    sandbox.stub(A, 'functionA'); 
    sandbox.stub(B, 'functionB'); 

    await myAction()(dispatch); 

    // passes 
    expect(dispatch.callCount).to.equal(2); 

    //passes 
    expect(A.functionA).to.have.been.called(); 

    // fails 
    expect(B.functionB).to.have.been.called();  
    }); 
}); 

最後に期待がエラーで失敗します。

TypeError: [Function: functionB] is not a spy or a call to a spy!

ときバベルがエクスポート輸出 (ES6 re-exported values are wrapped into Getterをインポートする方法に関連しているようで、私はこれを取得コンソールに、私は、出力の機能を、 )。これらの機能はテスト中ではなく、実際に動作します。

{ functionA: [Function: functionA] } 
{ functionB: [Getter] } 

私はstub.get(getterFn)を使用してみましたが、それはちょうど私にエラーを与える:

TypeError: Cannot redefine property: fetchTopicAnnotations

答えて

0

は、あなたのスタブを命名したことがありますか?あなたのコードはちょっと変わっています。テストのどの時点でもあなたのスタブを参照しているわけではありません。

import * as A from './moduleA'; 
import * as B from 'libraryB'; 

describe(__filename, async() => { 
    it('Calls 2 other actions',() => { 
    sandbox = sinon.sandbox.create(); 

    const dispatch = sandbox.stub(); 

    const functionAStub = sandbox.stub(A, 'functionA'); 
    const functionBStub = sandbox.stub(B, 'functionB'); 

    await myAction()(dispatch); 

    // passes 
    expect(dispatch.callCount).to.equal(2); 

    //passes 
    expect(functionAStub.called).toBe(true); 

    // fails 
    expect(functionBStub.called).toBe(true);  
    }); 
}); 
+0

答えていただきありがとうございますが、スタブの名前を付けても効果はありません –

関連する問題