【问题标题】:How to mock events with sinon?如何用 sinon 模拟事件?
【发布时间】:2019-08-09 13:55:47
【问题描述】:

这是我试图通过 ldapClient 获取用户数据的简单程序。我需要在没有互联网连接的情况下对其进行测试,因此想知道如何模拟该 result.on 事件以返回适当的数据。

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;

正在寻找一些东西(见下文),但假设我需要使用间谍。但是我如何在那个深层嵌套的类中定义它呢?

before(()=>{
    sinon
    .stub(MY_CLASS.ldapClient, 'search')
    .yields(???);
});
after(()=>{
    MY_CLASS.ldapClient.search.restore();
});

【问题讨论】:

    标签: node.js unit-testing mocha.js sinon


    【解决方案1】:

    如果您要存根库,而不是从原始类文件中导出,则需要导入而不是将其作为类上的方法/属性引用

    然后你会想要使用callsArg from sinon 来调用回调

    var ldapClient = ldap.createClient(ldapConfig);
    
    ...
    
    var ldapStub;
    
    before(()=>{
        ldapStub = sinon
            .stub(ldapClient, 'search')
            .callsArg(2);
    });
    after(()=>{
        ldapStub.restore();
    });
    

    然后您可以在存根中包含断言(例如,ldapStub.calledOnce 应该为真,等等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2017-10-08
      • 2016-04-12
      • 2021-12-05
      • 2019-03-24
      • 2019-12-15
      相关资源
      最近更新 更多