我使用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"我期待的变量。我可以使用假对象进行检查,但我不确定在这种情况下首先要检查的确切方法。
我查看了肥皂存根,但是没有很多文档,这个例子对我没有意义。
非常感谢任何帮助。 :)