【发布时间】:2019-05-24 09:34:31
【问题描述】:
我有以下实现。我如何进行单元测试。我想确保 processData 在成功时只被调用一次,handleDecryptError 在错误时被调用一次。
我的单元测试向我抛出了一个错误,指出 AssertionError: expected 0 to equal 1 for should.equal(getHandleDecryptErrorSpy.callCount, 1);。
实施:
let getData = exports.getData = (err, res, param) => {
...
return security.decryptJWE(jweParts[0], jweParts[1], jweParts[2], jweParts[3], jweParts[4], privatekey)
.then(data => processData(data, param))
.catch(error => handleDecryptError(error, param));
}
let handleDecryptError = exports.handleDecryptError = (error, param) => {
log.error(message.ERROR_DECRYPTING.red, error);
..
return;
}
let processData = exports.processData = (momData, param) => {
log.info(message.SUCCESS.red);
...
}
测试用例:
it('6. Response for data is empty string', (done) => {
let getDecryptJWESpy = sinon.stub(security, "decryptJWE").rejects(message.ERROR_DECRYPTING);
let getProcessDataSpy = sinon.spy(updateTask, "processData");
let getHandleDecryptErrorSpy = sinon.spy(updateTask, "handleDecryptError");
let response = {
body: "",
text: ""
};
updateTask.getData(null, response, ["TASKID"]);
should.equal(getDecryptJWESpy.callCount, 1);
should.equal(getProcessDataSpy.callCount, 0);
should.equal(getHandleDecryptErrorSpy.callCount, 1);
done();
});
【问题讨论】:
-
如果你的函数从
security.decryptJWE()返回promise,测试起来会容易得多 -
@MarkMeyer 所以如果我兑现我的承诺,我该如何继续进行测试?
-
这不仅仅是评论可以处理@shadow。请参阅下面的代码。
标签: node.js unit-testing promise mocha.js sinon