如何在捕获 Promise 时使 Node 单元测试失败?
How do I fail a Node unit test on the catch of a Promise?
我正在使用 Node.js 进行一些单元测试,我想通过这样的测试:
doSomething()
.then(...)
.catch(ex => {
// I want to make sure the test fails here
});
我正在使用 Assert,所以我发现 Assert.Fails. The problem is that fails
expects actual
and expected
, which I don't have. The Node documentation doesn't say anything about them being required, but the Chai documentation,它是 Node 兼容的,说它们是。
我应该如何未能通过承诺的 catch
测试?
你考虑过Assert.Ok(false, message)吗?它更简洁。
Assert.fail 正在寻求进行比较并显示其他信息。
您可以使用专用的间谍库,例如 Sinon,或者您可以自己实现一个简单的间谍。
function Spy(f) {
const self = function() {
self.called = true;
};
self.called = false;
return self;
}
间谍只是一个包装函数,它记录有关如何调用该函数的数据。
const catchHandler = ex => ...;
const catchSpy = Spy(catchHandler);
doSomething()
.then(...)
.catch(catchSpy)
.finally(() => {
assert.ok(catchSpy.called === false);
});
基本原则是监视 catch 回调,然后使用您的 promise 的 finally clause 确保未调用监视程序。
如果你将使用mocha
,那么优雅的方式如下:
describe('Test', () => {
it('first', (done) => {
doSomething()
.then(...)
.catch(done)
})
})
如果您的 Promise 失败,done
方法将以抛出的异常作为参数被调用,所以上面的代码等同于
catch(ex => done(ex))
在 mocha
中,使用参数调用 done() 未通过测试。
我正在使用 Node.js 进行一些单元测试,我想通过这样的测试:
doSomething()
.then(...)
.catch(ex => {
// I want to make sure the test fails here
});
我正在使用 Assert,所以我发现 Assert.Fails. The problem is that fails
expects actual
and expected
, which I don't have. The Node documentation doesn't say anything about them being required, but the Chai documentation,它是 Node 兼容的,说它们是。
我应该如何未能通过承诺的 catch
测试?
你考虑过Assert.Ok(false, message)吗?它更简洁。
Assert.fail 正在寻求进行比较并显示其他信息。
您可以使用专用的间谍库,例如 Sinon,或者您可以自己实现一个简单的间谍。
function Spy(f) {
const self = function() {
self.called = true;
};
self.called = false;
return self;
}
间谍只是一个包装函数,它记录有关如何调用该函数的数据。
const catchHandler = ex => ...;
const catchSpy = Spy(catchHandler);
doSomething()
.then(...)
.catch(catchSpy)
.finally(() => {
assert.ok(catchSpy.called === false);
});
基本原则是监视 catch 回调,然后使用您的 promise 的 finally clause 确保未调用监视程序。
如果你将使用mocha
,那么优雅的方式如下:
describe('Test', () => {
it('first', (done) => {
doSomething()
.then(...)
.catch(done)
})
})
如果您的 Promise 失败,done
方法将以抛出的异常作为参数被调用,所以上面的代码等同于
catch(ex => done(ex))
在 mocha
中,使用参数调用 done() 未通过测试。