Заглушка Sinon на прототипе, проверьте значение фактического экземпляра, на котором она вызывается - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть заглушка sinon для прототипа и метода ...

stub = sinon.stub(MyType.prototype, 'someFunction');

MyType имеет некоторое значение в свойстве в зависимости от того, какой это экземпляр.Давайте вызовем свойство identifier.

Мне нужно проверить две вещи ...

  1. Чтобы someFunction был вызван с правильными параметрами.expect(stub).to.have.been.calledWith('Some Parameter'); (работает как положено).

  2. То, что identifier экземпляра, для которого была вызвана функция, является правильным.Есть много случаев MyType, и мне нужно проверить, была ли вызвана функция на правильном.

Я могу сделать первую проверку.Но я не знаю, как (или даже если) я могу сделать вторую проверку.

Это возможно?

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

Да, это возможно.

Вы можете использовать sinon.assert.calledOn, spy.calledOn, spyCall.thisValue или spy.thisValues для проверки значения this для вызовов:

import * as sinon from 'sinon';

class MyType {
  constructor(id) {
    this.identifier = id;
  }
  someFunction(arg) { }
}

test('someFunction', () => {
  const stub = sinon.stub(MyType.prototype, 'someFunction');

  const one = new MyType("oneId");
  const two = new MyType("twoId");

  one.someFunction('firstArg');
  two.someFunction('secondArg');

  sinon.assert.calledWith(stub.firstCall, 'firstArg');  // SUCCESS
  sinon.assert.calledOn(stub.firstCall, one);  // SUCCESS
  expect(stub.firstCall.thisValue.identifier).to.equal('oneId');  // SUCCESS

  sinon.assert.calledWith(stub.secondCall, 'secondArg');  // SUCCESS
  sinon.assert.calledOn(stub.secondCall, two);  // SUCCESS
  expect(stub.secondCall.thisValue.identifier).to.equal('twoId');  // SUCCESS
});
...