如何用 sinon 模拟事件?
How to mock events with sinon?
这是我尝试通过 ldapClient 获取用户数据的简单程序。我需要在没有互联网连接的情况下对其进行测试,所以想知道如何将 result.on 事件模拟为 return 适当的数据。
var request = require('request');
var ldap = require('ldapjs');
....
var ldapClient = ldap.createClient(ldapConfig);
....
var MY_CLASS = {
getData: function (userId, cb) {
if (!ldapConfig) {
return cb(new Error('ldap is not configured'));
}
ldapClient.search('xxxx.com', { ldapConfig },
function (err, result) {
if (err) {
return cb(err);
}
result.on('searchEntry', function (entry) {
if (entry) {
return entry;
}
});
result.on('error', function (err) {
cb(err);
});
result.on('end', function () {
cb(null, 'END');
});
});
}
};
module.exports = MY_CLASS;
正在寻找一些东西(见下文)但假设我需要使用间谍。但是我如何在那个深层嵌套中定义它?class?
before(()=>{
sinon
.stub(MY_CLASS.ldapClient, 'search')
.yields(???);
});
after(()=>{
MY_CLASS.ldapClient.search.restore();
});
如果您存根库,而不是从原始 class 文件导出,则需要导入而不是在 class[= 上将其作为 method/property 引用13=]
然后你会想要使用callsArg from sinon来调用回调
var ldapClient = ldap.createClient(ldapConfig);
...
var ldapStub;
before(()=>{
ldapStub = sinon
.stub(ldapClient, 'search')
.callsArg(2);
});
after(()=>{
ldapStub.restore();
});
然后您可以在存根上包含断言(例如 ldapStub.calledOnce
应该为真,等等)
这是我尝试通过 ldapClient 获取用户数据的简单程序。我需要在没有互联网连接的情况下对其进行测试,所以想知道如何将 result.on 事件模拟为 return 适当的数据。
var request = require('request');
var ldap = require('ldapjs');
....
var ldapClient = ldap.createClient(ldapConfig);
....
var MY_CLASS = {
getData: function (userId, cb) {
if (!ldapConfig) {
return cb(new Error('ldap is not configured'));
}
ldapClient.search('xxxx.com', { ldapConfig },
function (err, result) {
if (err) {
return cb(err);
}
result.on('searchEntry', function (entry) {
if (entry) {
return entry;
}
});
result.on('error', function (err) {
cb(err);
});
result.on('end', function () {
cb(null, 'END');
});
});
}
};
module.exports = MY_CLASS;
正在寻找一些东西(见下文)但假设我需要使用间谍。但是我如何在那个深层嵌套中定义它?class?
before(()=>{
sinon
.stub(MY_CLASS.ldapClient, 'search')
.yields(???);
});
after(()=>{
MY_CLASS.ldapClient.search.restore();
});
如果您存根库,而不是从原始 class 文件导出,则需要导入而不是在 class[= 上将其作为 method/property 引用13=]
然后你会想要使用callsArg from sinon来调用回调
var ldapClient = ldap.createClient(ldapConfig);
...
var ldapStub;
before(()=>{
ldapStub = sinon
.stub(ldapClient, 'search')
.callsArg(2);
});
after(()=>{
ldapStub.restore();
});
然后您可以在存根上包含断言(例如 ldapStub.calledOnce
应该为真,等等)