Нужна помощь в преобразовании рабочей функции стрелки в обычную функцию для написания модульных тестов

#javascript #node.js

Вопрос:

Я хотел бы преобразовать приведенный ниже рабочий код

 const Client = require('node-rest-client').Client;
const Rest = new Client();

const useRestClient = (url,args,_next)=> {
    return new Promise(resolve => {
        Rest.post(url,args, (data,_response) =>
            {
                resolve(data);
            })
        })
}
 

к чему-то вроде этого:

 const Client = require('node-rest-client').Client;
const Rest = new Client();

function callRestPost(resolve, url, args) 
{
    return Rest.post(url,args, (data,_response) =>
            {
                resolve(data);
            });
}

const useRestClient = (url,args,_next)=> {
    return new Promise(callRestPost);
}
 

Это правильно? Причина, по которой я это делаю, заключается в том, чтобы издеваться над методом Rest.post для модульного тестирования. Я ограничен использованием мокко синон для тестирования, и я новичок в JS и node.js. Пожалуйста, помогите.

Ответ №1:

Вы близки, вам просто нужно пройти в args..

 const Client = require('node-rest-client').Client;

function callRestPost(resolve, url, args) 
{
  return Rest.post(url,args, (data,_response) => {
    resolve(data);
  });
}

const useRestClient = (url,args,_next)=> {
  return new Promise((resolve, reject) => { 
    try {
      return callRestPost(resolve, url, args);
    } catch (err) {
      reject(err);
    }
  });
}
 

Однако в чем причина для принятия решения?

ИМО что-то вроде этого чище.

 const Client = require('node-rest-client').Client;
const RestClient = new Client();

function callRestPost(restClient, url, args) {
  return new Promise((resolve, reject) => {
    try {
      restClient.post(url, args, (data, resp) => {
        if (resp.status !== 200) reject(resp.status);
        resolve(data);
      });
    } catch (err) {
      reject(err);
    }
  });
}

// Use it like:
callRestPost(RestClient, "some.url", [foo, bar, baz]);
 

Ответ №2:

Я бы переписал это так.

 const Client = require('node-rest-client').Client;
const Rest = new Client();

function callRestPost(resolve, url, args) {
  return Rest.post(url,args, function(data,_response) {
    resolve(data);
  });
}

function useRestClient(url,args,_next) {
  return new Promise(function(resolve) {
    return callRestPost(resolve, url, args)
  });
}