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

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

function testFunction() {
  var job = this.win.get.value1   //test
  var job1 = this.win.get.value2 // test1
  if(job === 'test' && job1 === 'test1') {
    return true;
  }
    return false; 
}

И я пытаюсь протестировать testFunction с помощью кармы, и я попытался заглушить два значения своими значениями, чтобы он мог переопределить значения функции

it('should test my function', function(done) {
  var stub = sinon.stub('job','job1').values('test','test1');
  myFunction.testFunction('test', function(err, decodedPayload) {
    decodedPayload.should.equal(true);
    done();
  });
});

Я получаю сообщение об ошибке "попытка обернуть неопределенное свойство задания как функцию"

0
ali 1214 18 Фев 2018 в 14:00

1 ответ

Лучший ответ

Прежде всего, вы можете упростить свой testFunction следующим образом.

function testFunction() {
  return this.win.get.value1 === 'test' && this.win.get.value2 === 'test1';
}

Здесь нет ничего асинхронного, поэтому в вашем тесте вам не нужно использовать done ().

В документации Sinon "заглушка" предлагается использовать функцию песочницу, чтобы заглушить не- свойства функции.

Из вашего вопроса не ясно, каков ваш контекст «this», поэтому я предполагаю, что ваши тесты создали экземпляр того, что вы тестируете, с именем «myFunction» (что подразумевает ваш тест).

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

Не забудьте восстановить () песочницу, чтобы не загрязнять последующие тесты.

it('should test my function', function() {
  var sandbox = sinon.sandbox.create();
  sandbox.stub(myFunction, 'win').value({
    get: {
      value1: 'test',
      value2: 'test1',
    }
  });

  myFunction.testFunction().should.equal(true);

  sandbox.restore();
});
0
Zoom 2 Май 2018 в 19:18