0

我正在使用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 请求,但没有取得任何成功。任何帮助,将不胜感激。

4

2 回答 2

0

你想要的是控制soap对象的createClient. 您可以使用属于以下两类之一的技术来做到这一点:

  1. 依赖注入 - 暴露一个设置器,通过它你可以注入一个你自己控制的假模块进行测试
  2. 使用链接接缝 - 挂钩导入/要求机制并覆盖模块正在获取的内容。

Sinon 项目有一个很好的关于使用链接接缝的页面proxyquire,我还详细介绍了如何在问题跟踪器上进行 DI

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

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

然后在您的测试代码中:

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

...
assert(fakeSoap.createClient.calledOnce);
assert(...)
于 2017-06-11T22:02:42.517 回答
0

嗨,我已经用以下代码解决了我的问题:

sinon.stub(soap, 'createClient').yields(null, {
        GetInfoSOAP: function (request, cb) {
            return cb(null, myDesiredData);
        }
    });
于 2017-06-30T07:34:32.827 回答