Sinon Stub не работи в мока

Опитвам се да използвам sinon stub за подигравка на функция, но не работи според очакванията, може ли някой да обясни как да го поправя

В един от файловете 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)


Вашият синон мъничък изглежда добре, но това, което очаквате в теста, е неправилно. Ако функцията 'test' върне 'working' (заради мъничето), тогава ще се случи следното:

  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. Или трябва да промените своя мъниче, за да връща „test“ вместо „working“, или трябва да промените проверката, която правите във вашия if. - person Simon Groenewolt; 18.10.2015