【问题标题】:How to mock function for unit testing in serverless-mocha-plugin如何在 serverless-mocha-plugin 中模拟单元测试功能
【发布时间】:2018-11-06 23:45:58
【问题描述】:

我正在使用 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 中模拟函数

【问题讨论】:

    标签: node.js unit-testing aws-lambda mocha.js aws-serverless


    【解决方案1】:

    我找到了一种在 serverless-mocha-plugin 中使用 nodejs 模拟函数的方法

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

    这是上述函数的示例 为了模拟 loginMethods

    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);
    

    这样在测试什么时候调用这个函数时只会调用mock函数而不是原来的函数并且response也会被mock response

    【讨论】:

    • 这正是我要找的,谢谢!
    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 2020-05-30
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2016-01-27
    • 2019-08-26
    相关资源
    最近更新 更多