mocha js 断言在使用 promise 时挂起?
mocha js assertion hangs while using promise?
"use strict";
let assert = require("assert");
describe("Promise test", function() {
it('should pass', function(done) {
var a = {};
var b = {};
a.key = 124;
b.key = 567;
let p = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 100)
});
p.then(function success() {
console.log("success---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
}, function error() {
console.log("error---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
});
});
});
输出:
我正在使用节点 v5.6.0。
当值不匹配时,测试似乎挂起断言。
我尝试使用 setTimeout 检查 assert.deepEqual 是否有问题,但它工作正常。
但是在使用 Promise 时失败,如果值不匹配则挂起。
您收到该错误,因为您的测试从未完成。这个断言:assert.deepEqual(a, b, "response doesnot match");
抛出一个错误,所以你没有 catch 块,done
回调永远不会被调用。
您应该在承诺链的末尾添加 catch
区块:
...
p.then(function success() {
console.log("success---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
}, function error() {
console.log("error---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
})
.catch(done); // <= it will be called if some of the asserts are failed
由于您使用的是 Promise,我建议在 it
的末尾简单地 return 它。一旦 Promise 被解决(完成或被拒绝),Mocha 将认为测试已经完成并且它会消耗 Promise。如果 Promise 被拒绝,它将使用它的值作为抛出的错误。
注意:如果您正在 returnPromise,请不要声明 done
参数。
"use strict";
let assert = require("assert");
describe("Promise test", function() {
it('should pass', function(done) {
var a = {};
var b = {};
a.key = 124;
b.key = 567;
let p = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 100)
});
p.then(function success() {
console.log("success---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
}, function error() {
console.log("error---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
});
});
});
输出:
我正在使用节点 v5.6.0。 当值不匹配时,测试似乎挂起断言。
我尝试使用 setTimeout 检查 assert.deepEqual 是否有问题,但它工作正常。
但是在使用 Promise 时失败,如果值不匹配则挂起。
您收到该错误,因为您的测试从未完成。这个断言:assert.deepEqual(a, b, "response doesnot match");
抛出一个错误,所以你没有 catch 块,done
回调永远不会被调用。
您应该在承诺链的末尾添加 catch
区块:
...
p.then(function success() {
console.log("success---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
}, function error() {
console.log("error---->", a, b);
assert.deepEqual(a, b, "response doesnot match");
done();
})
.catch(done); // <= it will be called if some of the asserts are failed
由于您使用的是 Promise,我建议在 it
的末尾简单地 return 它。一旦 Promise 被解决(完成或被拒绝),Mocha 将认为测试已经完成并且它会消耗 Promise。如果 Promise 被拒绝,它将使用它的值作为抛出的错误。
注意:如果您正在 returnPromise,请不要声明 done
参数。