Синон Стаб не работает в мокко

Я пытаюсь использовать заглушку sinon, чтобы издеваться над функцией, но она не работает должным образом, может ли кто-нибудь объяснить, как это исправить

В одном из файлов customFunc.js у меня есть такие функции, как

function test() {
  return 'working good';
}
exports.test = test;

function testFunction(data, callback) {
  var sample = test();
  if(sample === 'test') {
    return callback(null, sample);
  }
  else {
    return callback(null, 'not working');
  }
}
exports.testFunction = testFunction;

и я пытаюсь протестировать testFunction, используя мокко, и я пытался заглушить тестовую функцию, используя sinon, как это

it('testing sinon', function(done) {
  var stub = sinon.stub(customFunc,'test').returns('working');

  customFunc.testFunction('test', function(err, decodedPayload) {
    decodedPayload.should.equal('working');
    done();
  });
});

Работает ли sinon? Я всегда должен получать «работу» в качестве вывода, но этого не происходит, пожалуйста, дайте мне знать, как имитировать функцию test().


person UserJ    schedule 08.10.2015    source источник


Ответы (1)


Ваша синоновая заглушка выглядит нормально, но то, что вы ожидаете от теста, неверно. Если функция «тест» возвращает «работает» (из-за заглушки), то произойдет следующее:

  var sample = test(); // sample = 'working'
  if(sample === 'test') { // will evaluate false
    return callback(null, sample);
  }
  else {
    return callback(null, 'not working'); // will return 'not working'
  }

Поэтому, естественно, это будет оцениваться как false.

decodedPayload.should.equal('working');
person KJ3    schedule 08.10.2015
comment
Спасибо за ответ, у меня заглушка не работает. Если вы считаете, что код неверен, не могли бы вы указать, где ошибка. Есть ли какой-нибудь другой модуль, который мы можем использовать, если sinon не работает? - person UserJ; 08.10.2015
comment
@UserJ Я думаю, вы не видите, что KJ3 пытается вам показать: вы создаете заглушку, которая возвращает «работает», но сравниваете это значение с «тестом» в своем операторе if. Вы либо должны изменить свою заглушку, чтобы она возвращала «тест», а не «работает», либо вы должны изменить проверку, которую вы делаете в своем if. - person Simon Groenewolt; 18.10.2015