を使用して機能するためにsinonスタブを使用してテストを行います。私は自分のコードから解決するわけではない場合、テストは失敗するはずですが、現在はそれが通過しているSinonスタブの約束に</p> <p>を使用してテストケースを作成したいの約束
var sendMail = function (templateName, recipients, templateParameters, attachments, subject) {
return mailingExternalTemplateModel.findMailingTemplateId(templateName)
.then((result) => {
var params = {
"FromEmail": nodeMailjet.mailjetFromMail,
"FromName": nodeMailjet.mailjetFromName,
"Subject": subject,
'MJ-TemplateID': result,
'MJ-TemplateLanguage': true,
"Recipients": recipients,
"Vars": {
'username': templateParameters.username,
'hello': i18n.__('email.hello'),
'voucher_details': i18n.__('email.voucher_details'),
'email_footer': i18n.__('email.footer.i_love_my_price')
}
};
if (attachments) {
params.Attachments = attachments;
}
return mailjet
.post("send")
.request(params)
.then((result) => {
return result.body; //***** If i comment here then still test case goes green which should fail. so how i achive that?
});
})
.catch((err) => {
return Promise.reject(err);
});
};
私は戻らない約束を意味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();
});
のはなぜですか?理解できません?これは完璧な質問です... –
done();を移動してみてください。あなたのアサート後にその中で電話してください –
@wietsevenemaそれはエラーを与えるでしょうエラー:2000msのタイムアウトを超えました。非同期テストとフックでは、 "done()"が呼び出されていることを確認してください。プロミスを返す場合は、それが解決することを確認してください。 –