Как смоделировать функцию, которая импортируется отдельно от других и возвращает предпочтительный JSON в JS? - PullRequest
0 голосов
/ 22 марта 2020

У меня есть набор функций, которые экспортируются из файла utils. js и используются в одной из функций маршрута остальные API, я пытаюсь проверить функцию, высмеивая возвращаемое значение, но я не могу сделать это.

// utils.js
exports.callSeparate = function() {
  return new Promise(function (resolve, reject) {
    try {
        return {x:10, y:10}
    }
}

exports.callSeparate = function() {
  return new Promise(function (resolve, reject) {
    try {
        return {x:11, y:12}
    }
}


// index.js
const {callSeparate} = import("../utils.js")

router.post(firstfunction,secondfunction,thridfunction);

async function secondfunction(req, res, next) {
    result = await callSeparate()
    return result;
}


//test.js
let callAPistub = sinon.stub(utils,'callSeparate');
callAPistub.returns(    
    {x:13, y:14}
    );

Я могу смоделировать функцию, если импортирую всю библиотеку утилит и затем использую эту функцию в остальном API.

// index.js
const utils = import("../utils.js")

router.post(firstfunction,secondfunction,thridfunction);

async function secondfunction(req, res, next) {
    result = await utils.callSeparate()
    return result;
}

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

1 Ответ

0 голосов
/ 22 марта 2020

Прежде всего, ваш не совсем имеет смысла. callAPistub.returns( returns {x:13, y:14} ) на самом деле не функция, поэтому она не должна ничего возвращать. Вы просто устанавливаете возвращаемое значение, поэтому, когда эта функция теперь вызывается, она вернет {x: 13, y: 14}.

Я получил это на работу:

//test.js
  const utils = require("./utils.js")
  var sinon = require('sinon');
  let callAPistub = sinon.stub(utils,'callSeparate1');
  callAPistub.returns( {x:13, y:14} );
  console.log(callAPistub())

Terminal:

node test.js
{ x: 13, y: 14 }

Обратите внимание, что я изменил callAPistub.returns на это:

callAPistub.returns({x:13, y:14});
...