我将如何使用 proxyquire 和 sinon 存根以下模块:
var email = require("emailjs").server.connect.send();
我做了以下操作,但它不起作用,因为当我尝试在其中触发错误时,send()
它仍然会发送电子邮件。
sendMailStub = sinon.stub(email, "send");
testedModule = proxyquire('../index.js', {
'email': {
'server': {
'send': sendMailStub
}
}
});
并且还尝试过:
testedModule = proxyquire('../index.js', {
email: {send: sendMailStub}
});
这是迄今为止的完整测试,但失败了:
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: "peter@flyaway.com"
}
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();
}});
});
});