2016-07-08 68 views
1

如何在编写单元测试时有效地模拟对远程系统调用的响应。有问题的方法是这样的一个:节点JS - 如何为存储单元测试存根肥皂函数调用

client.SomeFunction(input, function(err, result)) {...} 

包含它的代码是在这里:

'use strict'; 
var soap    = require('soap'); 
var responseBuilder = require('./responseBuilder'); 
var errorHandler  = require('../src/errorHandler'); 

/** 
* Execute the soap client 
*/ 
exports.executeSoapClient = function (input, headers, wsdlOptions, wsdlPath) { 

    var soapClientPromise = new Promise(function(resolve, reject){ 

     var response = responseBuilder.buildResponse(); 

     //Call SOAP Client 
     soap.createClient(wsdlPath, wsdlOptions, function (err, client) { 
      if (err) { 
       console.error(err, err.stack); 
       reject(errorHandler.createError("Unexpected: Could not communication with remote system.", 500)); 
      } 

      client.addSoapHeader(headers, "", "tkn", "http://siebel.com/webservices"); 
      //This is the function I want to mock out. 
      client.SomeFunction(input, function (err, result) { 

       if (err) { 
        console.error(err); 
        reject(errorHandler.createError("Unexpected: Unexpected: Could not call remote function on remote system.", 500)); 
       } else { 
        if (result.Error_spcCode > 0) { 
         var errorMessage = result.Error_spcMessage + " (" + result.Error_spcCode + ")"; 
         var error = errorHandler.createError("Business rule violation in remote system: " + errorMessage, 401); 
         console.error(error); 
         reject(error); 
        } else { 
         var successMessage = { flexId: result.FLEXId , message: result.Message }; 
         resolve(response.success(successMessage)); 
        } 
       } 
      }); 
     }); 
    }); 
    return soapClientPromise; 
}; 

该代码最终会为什么功能需要来运行作为AWS LAMBDA,这是以这种方式命名。

回答