Как имитировать функцию модульного тестирования в serverless-mocha-plugin

Я использую лямбда-функцию aws и 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);

В модульном тесте я не хочу вызывать реальную функцию, я просто хочу вызвать издевательскую функцию для модульного тестирования. Я из фона пользовательского интерфейса, чтобы добиться того же, то есть смоделировать функцию в модульном тестировании в angular, которую мы можем легко сделать при импорте.

У меня есть способ издеваться над функцией в nodejs


person Vicky Kumar    schedule 28.05.2018    source источник


Ответы (1)


Я нашел способ имитировать функцию в serverless-mocha-plugin для aws, используя 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);

Таким образом, во время теста, когда эта функция будет вызываться, она будет вызывать только фиктивную функцию, а не исходную функцию, и ответ также будет фиктивным ответом.

person Vicky Kumar    schedule 29.05.2018
comment
Это именно то, что я искал, спасибо! - person Mauricio Avendaño; 09.01.2020