私は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
答えていただきありがとうございますが、スタブの名前を付けても効果はありません –