我有以下模块。
var Sendcloud = require('sendcloud');
var sc = new Sendcloud("key1","key2","key3");
var service = {};
service.restorePassword = function (params, cb) {
if (!params.to || !params.name || !params.token) {
throw "Miss params"
}
var defaultTemplate = adminBaseUrl + "reset/token/" + params.token;
var subject = params.subject || "Letter";
var template = params.template || defaultTemplate;
// Send email
sc.send(params.to, subject, template).then(function (info) {
console.log(info)
if (info.message === "success") {
return cb(null, "success");
} else {
return cb("failure", null);
}
});
};
module.exports = service; …Run Code Online (Sandbox Code Playgroud) 我正在使用 axios 拦截器在请求标头中设置授权令牌。
axios.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer ' + Auth.getToken()
return config
})
Run Code Online (Sandbox Code Playgroud)
如何测试我的请求是否在标头中使用正确的令牌发送?
Ps.: 我用的是 Mocha + Chai
我正在尝试存根一个接受参数的方法。
我通常像这样使用我的对象:
const res = await Obj.find('admin', 'type');
Run Code Online (Sandbox Code Playgroud)
这有效。它要么返回 null 要么返回一个对象。
我通常像这样存根:
sandbox.stub(Obj.prototype, 'find', function () {
return Promise.resolve({ id: 123 });
});
Run Code Online (Sandbox Code Playgroud)
我想存根,以便考虑参数。我一直在阅读http://sinonjs.org/docs/#stubs,它应该如下所示:
const stub = sinon.stub(Obj.prototype.find);
stub.withArgs('admin', 'type')
.returns(Promise.resolve({ id: 123 }));
stub.withArgs('user', 'type').returns(null);
Run Code Online (Sandbox Code Playgroud)
但是我收到错误:
TypeError: Attempted to wrap undefined property undefined as function
at Object.wrapMethod (node_modules/sinon/lib/sinon/util/core.js:114:29)
at Object.stub (node_modules/sinon/lib/sinon/stub.js:67:26)
Run Code Online (Sandbox Code Playgroud)
console.log(Obj.prototype.find); 结果是:
[Function: find]
Run Code Online (Sandbox Code Playgroud) 我正在尝试为通过 ping Mailgun API 发送电子邮件的快速中间件函数编写单元测试。
module.exports = {
sendEmail: function (req, res) {
let reqBody = req.body;
let to = reqBody.to;
let from = reqBody.from;
let subject = reqBody.subject;
let emailBody = reqBody.body;
let data = {
from: from,
to: to,
subject: subject,
text: emailBody
};
mailgun.messages().send(data, function (error, body) {
if (error) {
res.status(400).json(error);
return;
}
res.status(200).json(body);
});
}
};
Run Code Online (Sandbox Code Playgroud)
测试文件:
describe('\'sendEmail\' method', () => {
let mailgun;
beforeEach(() => {
mailgun = require('mailgun-js')({ apiKey: MAIL_GUN_API_KEY, domain: MAIL_GUN_DOMAIN }); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Node.js MongoDB 驱动程序测试(使用Sinon.JS Stubs)以下调用......
collection.find({mood: 'happy'}).toArray((err, result) => {
// array result
cb(null, result);
});
Run Code Online (Sandbox Code Playgroud)
把我挂在这里的是.toArray() 链式函数。上述调用result按预期返回Array。
为了证明我的斗争 - 并进行对比 - 我能够存根以下没有被链接的调用......
collection.findOne({id: 'id'}, (err, result) => {
// single result
cb(null, result);
});
Run Code Online (Sandbox Code Playgroud)
存根=>
findOneStub.yields(null, {username: 'craig'});
Run Code Online (Sandbox Code Playgroud)
有没有一种直接的方法来存根我的.find调用,它返回一个函数.toArray来最终模拟我的结果?
这是我的代码:
var startTime = new Date(startDateTime).toLocaleTimeString("en-US", options);
Run Code Online (Sandbox Code Playgroud)
我需要startTime在我的单元测试中得到它。从 Java 的角度了解单元测试,我将解决这个问题作为如何模拟新的日期构造函数?然后如何模拟 toLocaleTimeString 函数调用?. 但是,我不确定这是在 javascript 中解决这个问题的方法。
我已经尝试了几件事,包括 sinon 的 useFakeTimers,但我认为这无关紧要,因为我实际上对时间的流逝不感兴趣。
这是我的测试代码,现在从大量谷歌搜索中闪现出来,零上下文是关于 sinon 是如何工作的:
var whatever = sinon.spy(global, 'Date');
sinon.stub(whatever, 'toLocaleTimeString').yields('7:00 PM');
Run Code Online (Sandbox Code Playgroud)
但是,这会导致错误“尝试将未定义的属性 toLocaleTimeString 包装为函数”。
请帮助我理解我打算如何消除这种功能以及我如何做到这一点背后的逻辑。
我正在使用酶和 sinon,尝试使用此测试用例时收到此错误:
期望值等于:true 收到:false
在控制台中使用时.debug()我看到:
显然没有调用 click 的事件处理程序。
我怀疑这个问题可能与.simulate('click', onLocationClick).
你能帮我看看我在这里做错了什么吗?谢谢。
console.log src\forecast\locationFinder\LocationFinder.test.js:28
<Location country="CZ" id={3067696} name="Prague" onLocationClick={[Function]} />
Run Code Online (Sandbox Code Playgroud)
console.log src\forecast\locationFinder\LocationFinder.test.js:28
<Location country="CZ" id={3067696} name="Prague" onLocationClick={[Function]} />
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我有:
function handleMessage() {
const twilio = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
let recordings = twilio.recordings(foundConference.RecordingSid);
console.log('recordings', recordings);
return recordings.remove();
}
Run Code Online (Sandbox Code Playgroud)
在我的存根中,我有:
const sinon = require('sinon');
const twilio = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
exports.twilioRecordings = () => {
console.log('about to stub', twilio.recordings);
sinon.stub(twilio, 'recordings').returns('here');
console.log('finished stub', twilio.recordings);
return;
};
Run Code Online (Sandbox Code Playgroud)
但是,它实际上并没有创建存根函数。它仍然使用原始recordings功能。我究竟做错了什么?
我正在为一个async执行一系列任务的函数编写测试,并且在执行更多任务之前等待 60 秒。我试图使用sinon.useFakeTimers()跳过这 60 秒,以便我可以在延迟后测试逻辑。
foo.js
module.exports.foo = async f => {
// ... more code ...
await new Promise((resolve, reject) => {
setTimeout(resolve, 60000);
});
// ... more code ...
f();
// ... more code ...
};
Run Code Online (Sandbox Code Playgroud)
测试 foo.js
const sinon = require('sinon');
const expect = require('chai').expect;
const { foo } = require('./foo');
describe('Module Foo ', function() {
it('call function after 1 minute', function() {
var clock = sinon.useFakeTimers();
const bar = sinon.stub();
foo(bar);
expect(bar.called).to.be.false; …Run Code Online (Sandbox Code Playgroud) 您能否分享一些用于 firebase-admin 身份验证的 Sinon 存根示例。面临的挑战是为进一步的存根初始化 firebase 管理应用程序。
我尝试了下一个代码
const admin = require('firebase-admin');
sinon.stub(admin, 'initializeApp');
var noUserError = new Error('error');
noUserError.code = 'auth/user-not-found';
sinon.stub(admin, 'auth').returns({
getUserByEmail: sinon.fake.rejects(noUserError)
});
var err = await admin.auth().getUserByEmail(email);
console.error(err);
Run Code Online (Sandbox Code Playgroud)
但它返回
Error (FirebaseAppError) {
codePrefix: 'app',
errorInfo: {
code: 'app/no-app',
message: 'The default Firebase app does not exist. Make sure you call initializeApp() before using any of the Firebase services.',
},
message: 'The default Firebase app does not exist. Make sure you call initializeApp() before using any …Run Code Online (Sandbox Code Playgroud)