1

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」メソッドを介して返すたびに、このエラーが発生します。

これが事実である理由は何ですか?

4

1 に答える 1