Stubbing mit proxyquire
Wie würde ich das stub-Modul mit proxyquire und sinon:
var email = require("emailjs").server.connect.send();
Habe ich Folgendes, aber es funktioniert nicht, weil wenn ich versuche zum auslösen eines Fehlers innerhalb send()
es immer noch sendet die E-Mail.
sendMailStub = sinon.stub(email, "send");
testedModule = proxyquire('../index.js', {
'email': {
'server': {
'send': sendMailStub
}
}
});
Und auch ausprobiert:
testedModule = proxyquire('../index.js', {
email: {send: sendMailStub}
});
Dies ist der vollständige test so weit, die scheitert:
var chai = require('chai');
var sinonChai = require("sinon-chai");
var sinon = require('sinon');
chai.use(sinonChai);
var proxyquire = require('proxyquire');
var testedModule;
var expect = chai.expect;
describe('invoicer', function () {
var nock = require('nock');
var ResponseOptions = {
username: "Peter Pan",
user_address_line_1: "Never Never Land",
user_address_line_2: "Tree-house 99",
user_post_code: "E4 9BY",
delivery_address_line_1: "Hook's Boat",
delivery_address_line_2: "Dock 69",
delivery_post_code: "SE2 4C",
order_number: "234234234",
order_date: "20/12/2090",
dispatch_date: "20/12/2090",
items: [
{
product_name: "Fairy Dust",
brand: "Airy fairy",
quantity: 5,
total: 2000
},
{
product_name: "Pirate Sword",
brand: "Pirate's Bay",
quantity: 8,
total: 2000
}
],
grand_total: 4000,
user_email: "[email protected]"
}
var mailOptions = {
text: "Hello World"
}
var scope = nock("http://somewhere.com")
.get("/orders")
.reply(200, ResponseOptions);
var sendStub, readFileStub, url, contextDoneSpy, obj, connectStub;
before(function () {
readFileStub = sinon.stub();
sendStub = sinon.stub().withArgs(mailOptions).callsArgWith(1, null, contextDoneSpy);
connectStub = sinon.stub().returns({
send: sendStub
});
testedModule = proxyquire('../index', {
'fs': {readFile: readFileStub},
'emailjs': {
'server': {
'connect': connectStub
}
}
});
url = "http://somewhere.com/orders";
contextDoneSpy = sinon.spy();
obj = {
user: 'AKIAJMHSJRRYGKTE4TOQ',
password: 'Ag3Nkpej8dxZ4DwYz2in/x8kUhN7Lh/BqXImB0+i+DWy',
host: "email-smtp.eu-west-1.amazonaws.com",
port: 587,
tls: true,
ssl: false
}
readFileStub.withArgs('./email.html').callsArgWith(1, null, 'file1');
connectStub();
});
it("readFile and successful context.done were called", function (done) {
testedModule.Invoicer(url, obj, { done: function () {
contextDoneSpy.apply(null, arguments);
expect(readFileStub).has.been.called;
expect(contextDoneSpy).to.have.been.called;
done();
}});
});
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Let ' s-first-fix die Zeile, wo der beschriebenen
emailjs
mit Hilfe der its - Dokumentationconnect
ist eine Funktion und sollten einige Parameter, außerdemsend
nicht zurück jedes Ding, im Grunde rufen eine callback -Proxyquire erfordert die Verwendung der gleichen Modul-Namen, also
email
sollteemailjs
, auf der anderen Seite bist du falsch Zuordnung der stub inproxiquire
sollte esTypeError: Object #<Object> has no method 'connect'
connect
als eine Funktion erstellen und zurück, das das Objekt, dann werden Sie in der Lage zu überprüfen, die Anrufe zuconnect
1) invoicer "before all" hook: TypeError: Should wrap property of object
before
wirft einen Fehler, sollten Sie sich für das, was falsch ist innensendMailStub = sinon.stub(emailjs, 'send');
Der gleiche Fehler passiert, wenn ich versuche, stubconnect
emailjs
im test und rufen Sie proxiquire mitemailjs
nach und das gleiche mitfs
; ich glaube, Sie brauchen Sie nicht in Ihrem test also nicht verlangen, daß Sie nur stub Ihnen in proxiquireproxyquire
, deshalb war ich auch immer die Fehler sind, anstatt:readFileStub = sinon.stub(); sendStub = sinon.stub();
Aber es ist immer noch nicht Lunte emailjs. Ich aktualisiert meine Frage mit meinem neuesten testError: timeout of 2000ms execeeded
connect
ist nicht eine Funktion. Wie könnte man die umgehen das Problem?Uncaught TypeError: Property 'connect' of object #<Object> is not a function
connectStub = sinon.stub().returns({ send: sendStub });