代码之家  ›  专栏  ›  技术社区  ›  Vicky Kumar

如何模拟无服务器mocha插件中的单元测试功能

  •  0
  • Vicky Kumar  · 技术社区  · 8 年前

    我正在使用aws lambda函数和nodejs,我正在尝试测试以下函数。

    module.exports.handler = (event, context, callback) => {
    
    var host = environment.set_environment(env);
    
    if (event.body[0].value) {
    var cid= event.body[1].customerID;
    var loginResponse = loginMethods.login(host,cid);
    
    loginResponse.then(function (loginResult) {
      if (loginResult.hash) {
        console.log("login success");
        var Response = requestMethod.callAPI(event.body, loginResult.hash);
        Response .then(function (Result) {
          console.log('successfulll');
    
    
    
        }, function (error) {
          console.log('failure response');
    
        })
      } else {
        console.log("login response with no token");
    
      }
    }, function (error) {
      console.log('login failure response');
    
    })
    
    } else {
      callback(null, responseMethods.error('Invalid request'));
    }
    
    };
    

    当我调用这个函数进行单元测试时,我想模拟在这个函数中调用的另一个函数

    例如在这一行

    var loginResponse = loginMethods.login(host,cid);
    

    在单元测试中,我不想调用真正的函数,我只想为单元测试调用模拟函数 我是从ui背景来实现同样的事情,即在单元测试中以角度模拟一个函数,我们可以在导入时轻松完成。

    在nodejs中有一种模拟函数的方法

    1 回复  |  直到 8 年前
        1
  •  0
  •   Vicky Kumar    8 年前

    我发现了一种使用nodejs在aws的无服务器mocha插件中模拟函数的方法。

    可以使用sinonjs http://sinonjs.org/

    下面是上述函数的示例 为了模拟登录方法

    const loginPromise = new Promise(function (resolve, reject) {
      const loginRes = {
    
        "status": "success",
        "hash": "U2_a5da71a9-4295-48e7-b427-843c17c8cae3",
        "firstName": "Guest",
        "lastName": "G",
      };
      resolve(loginRes);
    });
    
    var loginMock = sinon.mock(loginMethods);
    loginMock.expects('login').withArgs(arg1, arg2).returns(loginPromise);
    

    这样,当测试这个函数何时被调用时,它将只调用模拟函数而不是原始函数,并且响应也将被模拟响应