Как выполнить модульное тестирование, когда объект вызывается в оболочке с помощью sinon? - PullRequest
0 голосов
/ 28 февраля 2019

Следующий метод "set" должен быть протестирован с использованием sinon, и я не уверен, как это сделать.

// foo is just a wrapper
function Foo() {
  this.bar = new Bar();
}

Foo.prototype.set = function(x) {
   this.bar.set(x);
}

Вот попытка его модульного тестирования:

var foo = new Foo();
it("can called set method", function() {
  foo.set(x);
  foo.bar.set.calledOnceWith(x);
});

foo.bar.set.calledOnceWith не является функцией.

1 Ответ

0 голосов
/ 28 февраля 2019

Вы близки.

Вам просто нужно создать spy на Bar.prototype.set:

import * as sinon from 'sinon';

function Bar() { }
Bar.prototype.set = function(x) {
  console.log(`Bar.prototype.set() called with ${x}`);
}

function Foo() {
  this.bar = new Bar();
}
Foo.prototype.set = function(x) {
  this.bar.set(x);
}

it('calls set on its instance of Bar', () => {
  const spy = sinon.spy(Bar.prototype, 'set');  // spy on Bar.prototype.set
  const foo = new Foo();
  foo.set(5);
  sinon.assert.calledWithExactly(spy, 5);  // SUCCESS
})
...