Заглушка Sinon неправильно заменяет заглушку - PullRequest
0 голосов
/ 12 июня 2018

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

Пример кода:

// File being tested
function a() {
  let str = 'test';
  return b(str);
}

function b(str) {
  return str + str;
}

module.exports = {
  a: a,
  b: b
};

// Test file
let test = require('file.to.test.js');

it('should correctly stub the b function', () => {
  sinon.stub(test, 'b').returns('asdf');
  let result = test.a();

  // Expected 
  assert(result === 'asdf');

  // Received
  assert(result === 'testtest');
});

1 Ответ

0 голосов
/ 13 июня 2018

Ваша заглушка не имеет ожидаемого эффекта, потому что вы оцепили свойство импортируемого объекта.Однако function a() продолжает вызывать исходный function b(), потому что он вызывает функцию, а не метод объекта.

Если вы измените код так, как существует объект со свойством b и aи свойство a вызывает свойство b, тогда оно будет работать ожидаемым образом:

const x = {};
x.a = () => {
  let str = 'test';
  return x.b(str);
}

x.b = (str) => {
  return str + str;
}

module.exports = x;

Также посмотрите на этот ответ , он описывает аналогичную проблему.

...