我想使用Sinon stub Promise
创建一个测试用例如果我没有从我的代码中解析,那么测试应该失败,但目前正在通过。
return result.body;
如果我评论var sinonStubPromise = require('sinon-stub-promise');
sinonStubPromise(sinon);
it('it should send mail successfully', function(done) {
var findMailingTemplateIdStub = sinon.stub(mailingExternalTemplateModel, 'findMailingTemplateId');
findMailingTemplateIdStub.returnsPromise().resolves(88888);
var successResponse = {'successId': 989890};
var request = sinon.stub().returnsPromise().resolves(successResponse);
sinon.stub(mailjet, "post", function () {
return {
request: request
}
});
mailSender.sendMail(templateName, recipients, templateParams, attachments, 'thats subject')
.then((returnVal) => {
assert.deepEqual(
returnVal,
successResponse
);
})
.catch((err) => {
})
done();
});
,这意味着Promise不会返回,那么测试应该会失败。但它没有发生。
测试用例:
android.hardware.camera2
答案 0 :(得分:1)
如果不对您的代码进行广泛测试,我可以提供以下可能解决您问题的建议:首先,Mocha supports promises,当您想要测试基于promises的代码而不是使用done
时,它会更好用
此外,如果断言失败(抛出错误),则永远不会处理错误(它被吞下"),部分原因是您添加了空.catch()
。这不能通过在断言后添加done
来解决,因为它永远不会被调用(因为会抛出错误)。
尝试以下方法:
it('it should send mail successfully', function() {
...
return mailSender.sendMail(templateName, recipients, templateParams, attachments, 'thats subject')
.then((returnVal) => {
assert.deepEqual(
returnVal,
successResponse
);
});
});
注意done
以后是如何使用的,而mailSender.sendMail
返回的承诺将返回给Mocha。
答案 1 :(得分:1)
现在我将代码更改为关注及其工作。
主要变化是
findMailingTemplateIdStub.returnsPromise().resolves(88888); change to
findMailingTemplateIdStub.returns(Promise.resolve(88888));
和
var request = sinon.stub().returnsPromise().resolves(successResponse);
changed to var request = sinon.stub().returns(Promise.resolve(successResponse));
it('it should send mail successfully', function(done) {
var findMailingTemplateIdStub = sinon.stub(mailingExternalTemplateModel, 'findMailingTemplateId');
findMailingTemplateIdStub.returns(Promise.resolve(88888));
var successResponse = {
'body': {
Sent:
[
{
Email: 'test@example.com',
MessageID: '188589580585481212'
}
]
}
};
var request = sinon.stub().returns(Promise.resolve(successResponse));
sinon.stub(mailjet, "post", function () {
return {
request: request
}
});
mailSender.sendMail(templateName, recipients, templateParams, attachments, 'thats subject')
.then((returnVal) => {
assert.deepEqual(returnVal, successResponse.body);
done();
})
.catch((err) => {
done(err);
}
);
});