verwenden möchte ichMake Test sinon Stub für die Funktion mit Promises
einen Testfall mit Sinon Stub Versprechen machen, wenn ich nicht von meinem Code zu lösen bin dann sollte Test nicht bestehen, aber zur Zeit ist es vorbei.
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);
});
};
Wenn ich return result.body;
Kommentar aus, die die Versprechen bedeuten nicht zurückkehren, sollte der Test nicht bestehen. Aber es passiert nicht.
Testfall:
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();
});
Warum - Abstimmung? ich kann es nicht verstehen? Das ist eine perfekte Frage ... –
Versuchen Sie, die Done(); Rufen Sie innerhalb der dann nach Ihrer Bestätigung –
@wietsevenema wird es Fehler geben Fehler: Timeout von 2000ms überschritten. Stellen Sie für asynchrone Tests und Hooks sicher, dass "done()" aufgerufen wird. Wenn Sie eine Versprechung zurückgeben, stellen Sie sicher, dass sie verrechnet wird. –