gpt4 book ai didi

node.js - 用 proxyquire stub

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:23 25 4
gpt4 key购买 nike

我将如何使用 proxyquire 和 sinon stub 以下模块:

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();
}});

});
});

最佳答案

让我们首先修复您描述的 emailjs 所在的行使用其 documentation

require("emailjs").server.connect({
/* Required server options */
}).send(function (err, message) {
// This a function with a callback node convention signature
});

connect是一个函数,应该接收一些参数,此外 send不返回任何东西,基本上调用回调

Proxyquire 需要使用相同的模块名称,所以 email应该是 emailjs ,另一方面,您在 proxiquire 中分配 stub 是错误的, 应该是

connectStub = sinon.stub().returns(sendStub);
sendMailStub = sinon.stub(email, "send");
testedModule = proxyquire('../index.js', {
'emailjs': {
'server': {
'connect': connectStub
}
});

关于node.js - 用 proxyquire stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com