sinon スタブを取得して別の sinon スタブを返す/解決するのに問題があります。シノン、チャイ、チャイ・アズ・プロミス、モカを使っています。
いくつかの非同期タスクを順番に実行しています。テストしたいコードは次のようになります。
Terminal.findOneAsync({terminalId: terminalId}).then(function(terminal) {
terminal.lastSeen = timestamp;
return terminal.saveit();
}).then(function(terminal) {
//continue to do other stuff
});
そして、このためにスタブを作成しようとすると、次のようになります。
var saveitStub = sinon.stub(Terminal.prototype, 'saveit');
saveitStub.resolves(terminalUpdated);
var findOneStub = sinon.stub(Terminal, 'findOneAsync');
findOneStub.resolves(saveitStub);
「saveit」メソッドは Terminal.prototype にあるため、そこでスタブする必要があります。これを実行しようとすると、次のエラーが表示されます。
Unhandled rejection TypeError: undefined is not a function
行で:
return terminal.saveit();
しかし、端末オブジェクトをコンソールにダンプすると、他のスタブ オブジェクトと同じように (少なくとも私の単純な考えでは) 正常に見えます。スタブ化された saveit() メソッドは、テストで「スタンドアロン」と呼ぶことができます。しかし、chai の「return」または chai-as-promised の「resolve」メソッドを介して返すたびに、このエラーが発生します。
これが事実である理由は何ですか?