Я хочу сделать тестовый пример с использованием Sinon заглушки Promiseтестов сделать с помощью Sinon заглушки для функций с помощью Promises
Если я не разрешением от моего кода, то тест должен терпеть неудачу, но в настоящее время она проходит.
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 он выдаст ошибку Ошибка: превышен период ожидания 2000 мс. Для асинхронных тестов и перехватчиков убедитесь, что вызывается «done()»; если вы возвращаете обещание, убедитесь, что оно разрешено. –