如何在Node JS中使用sinon存根SOAP客户端请求?

时间:2017-05-30 09:06:06

标签: node.js unit-testing soap sinon strong-soap

我正在使用strong-soap模块从SOAP请求中获取数据。

var soap = require('strong-soap').soap;

soap.createClient(url, options, function (err, client) {
     var method = client.GetInfoSOAP;
     method(requestQuery, function (err, info) {
      // bla bla
     }
}

我收到了所需的数据。现在 我想编写单元测试用例来使用sinon存根来模拟SOAP请求,但没有取得任何成功。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

你想要的是控制soap对象的createClient。您可以使用属于以下两种类别之一的技术来实现这一目标:

  1. 依赖注入 - 暴露一个setter,通过它可以注入一个你自己控制的虚假模块进行测试
  2. 使用链接接口 - 挂钩到导入/需要机制并覆盖模块获取的内容。
  3. Sinon项目通过proxyquire使用链接接缝a nice page,我还详细how to do DI on the issue tracker

    要实现第一个目标,您只需在模块中执行以下操作:

    module.exports._injectSoap = (fake) => soap = fake;
    

    然后在你的测试代码中:

    const fakeSoap = { createClient : sinon.stub().returns(/* ? */) }
    myModule._injectSoap(fakeSoap);
    
    ...
    assert(fakeSoap.createClient.calledOnce);
    assert(...)
    

答案 1 :(得分:0)

您好我用以下代码解决了我的问题:

sinon.stub(soap, 'createClient').yields(null, {
        GetInfoSOAP: function (request, cb) {
            return cb(null, myDesiredData);
        }
    });