モカを使ったタイムアウトのためにテストに失敗しました。 私は "done()"関数を呼び出しますが、それは何らかの理由で動作しないようです。ネストされた約束 - モカ - 超過タイムアウト
私のテストは、現在、次のようになります。
私calendar.Connect()
と
calendar.getAll()
の両方が約束されている
var express = require('express');
var expect = require('chai').expect;
var mocha = require('mocha');
var calendar = require('./../Server/calendarDatabase');
describe("Calendar", function() {
describe("Database", function() {
it("should get stuff from the database", function (done) {
return calendar.Connect()
.then(function() {
return calendar.getAll();
})
.then(function (returnValue) {
expect(returnValue.count).to.equal(5); //This should fail, my database records are 20+
done();
});
});
});
});
:私のテストを実行しながら、しかし
var express = require('express');
var sql = require('mssql');
var config = require('./../config');
var calendarDbConnection = {};
calendarDbConnection.Connect = function() {
return sql.connect(config.mssql);
}
calendarDbConnection.getAll = function() {
var promise = new sql.Request()
.query('select * from CalendarTable')
.catch(function (err) {
console.log(err.message);
});
return promise;
}
module.exports = calendarDbConnection;
、私は出力を以下の取得:
最後にthen()
の後にdone()
を呼び出すと、関数は解決されますが、テストの結果は返されません。私がデータベースから取得する行の数は20以上で、5と等しいかどうかをチェックします。したがって、テストは失敗するはずですが、そうではありません。
//previous code
.then(function (returnValue) {
expect(returnValue.count).to.equal(5); //This should fail, my database records are 20+
});
done();
//...
この最終的な結果は、私のテストに合格しますが、そうではありません。
私はここで何が欠けていますか?私はコールバック関数を呼び出すが、私の期待される結果は正しくない。
エラーはスローされません。チェーンの最後に '.catch'を追加しますか? – CodingIntrigue
私の質問が更新されましたが、これは動作しますが、その場合はテストに合格します。私は '期待'は、このテストが必要なキャッチブロックなしで失敗すると思った。 – Tikkes
見つけた!私が自分の「done」をキャッチすれば、それは私が期待したアサーションで動作します。すなわち、「then(....){... done(); } .catch(done); '助けてくれてありがとう、私が受け入れる答えとしてこれを投稿してください。 – Tikkes