Sinon存根检查是否使用特定的arg调用了外部SOAP调用

时间:2017-04-11 12:59:07

标签: javascript node.js soap sinon stub

我使用Jasmine和sinon来测试一些node.js代码。我在这个例子中使用了sinon存根。

我正在尝试将SOAP调用存根到外部服务,并且我想知道是否有任何方法可以确保在调用中使用正确的参数。

我已成功检查函数是否在其他情况下返回正确的参数,但不幸的是,这种情况属于嵌套回调,所以我不知道该怎么做。

这是我的代码片段(我正试图测试" client.ExternalService.HttpPort.actualCall"正在调用" args"变量I我期待着:

class ExternalServiceCaller extends BaseService {
    constructor(util) {
        super(util);
        this.util = util;
    }

    callExternalService(body, callback){
        let url = this.util.config.get('blah.my.url');
        let args = {
            'request':{
                'Property1': body.Property1,
                'Property2': body.Property2,
                'Property3': body.Property3,
                'Property4': body.Property4
            }
        };

        //soap.request()
        soap.createClient(url, sslOptions, function(err, client) {
            //client.[wsdlName].[binding name].[operation]
            client.ExternalService
            .HttpPort
            .actualCall(args, function(err, result) {
                if(!err){
                    callback(null, result);
                }
            }, sslOptions);
        });
    }
}

正如我上面所说,我试图编写测试以确保actualCall正在使用预期的" args"变量(确保传入的正文被正确格式化以传递给外部调用)。我可以通过截断soap.createClient和使用sinon.assert.calledWith()来很容易地为url做这个:

describe('The function', function(){
let service;
let externalServiceStub;
let externalRequest = helper.myExternalRequestObject;

describe('should use the correct URL',function(){
    beforeEach(function(){
        service = new ExternalServiceCaller(tools);
        externalServiceStub = sinon.stub(soap, 'createClient');
    });
    it ('and uses the correct URL when successful', function(){
        let url = tools.config.get('blah.my.url');
        service.callExternalService(myExternalRequestObject, callback => {});
        sinon.assert.calledWith(externalServiceStub, url);
        externalServiceStub.restore();
    });
});

不幸的是,我不知道如何检查是否正在使用" args"我期待的变量。我可以使用假对象进行检查,但我不确定在这种情况下首先要检查的确切方法。

我查看了肥皂存根,但是没有很多文档,这个例子对我没有意义。

非常感谢任何帮助。 :)

0 个答案:

没有答案