このアプリケーションでは多くのコールバックが発生し、「コールバック地獄」の良い例になりました。200 行または 300 行で、それぞれ 10、15 のネストされたコールバックを持つメソッド。
次に、良い習慣として、これらのコールバックのほとんどを分離し、then という名前を付けて、Bluebird の promise を使用して、より組織化された「then-chain」を作成しました。
私が実装したすべてのテストとメソッドは互いに非常に似ているため、同じメソッドの 2 つのテスト ケースが失敗した理由は正確にはわかりません。
next
関数とDAOメソッド(Mongoクエリを作成する)が呼び出されているかどうかを確認するためにSinonを使用していました。
その後、このメソッドで変更されたのは、そのメソッドの最初に実行されていたロジックを promise 内に転送したことであることに気付きました。
true
テストが promise の完了を待たずに間違って返されたため、「next」への呼び出しが評価されませんでした。
これは、悪い動作を示したテストの一部です。
var nextSpy = sinon.spy();
var methodSpy = sinon.spy(my_controller.options.dao, "findAsync");
my_controller.sendMail(req, res, nextSpy);
expect(methodSpy.called).to.be.true;
expect(sendMailSpy.called).to.be.false;
コントローラーのメソッドを変更しましたが、基本的にはプロミスの中にロジックがありました。出すことで問題は解決します。