Sinon Spy CallCount возвращает 0 - PullRequest
0 голосов
/ 28 мая 2019

Я не могу заставить мой тест работать. У меня есть простой миксин, например, так:

export const mixin = superclass => class mixin extends superclass {
  constructor() {
    super();
    this.addEventListener('do-it', this.doIt);
  }

  doIt() {
    console.log('did it');
  }
};

И простой тест:

describe('mixin', () => {
  it('should call doIt', () => {
    class TestElement extends mixin(HTMLElement) {}
    customElements.define('test-element', TestElement);

    const el = new TestElement();
    const spy = sinon.spy(el, 'doIt');

    el.dispatchEvent(new CustomEvent('do-it'));

    expect(spy.callCount).to.equal(1);
  });
});

https://jsfiddle.net/nbuLhvkd/

Он регистрирует did it, но значение callCount шпиона 0. Если я сделаю const spy = sinon.spy(console, 'log');, шпион callCount будет 1. Как правильно шпионить за экземплярами методов?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Я использовал TestElement.prototype для шпионажа, а также передвинул его перед созданием new TestElement();. Теперь это работает, но кто-то может объяснить, почему?

describe('Sinon examples', () => {
  it('logs test on do-it', () => {
    class TestElement extends mixin(HTMLElement) {}
    customElements.define('test-element', TestElement);

    const spy = sinon.spy(TestElement.prototype, 'doIt');
    const el = new TestElement();

    el.dispatchEvent(new CustomEvent('do-it'));

    expect(spy.calledOnce).to.be.true;
  });
});

https://jsfiddle.net/h0f9Le16/

0 голосов
/ 28 мая 2019

Вероятно, что ваш вызов dispatchEvent является асинхронным, поэтому callCount действительно равен 0, поскольку он выполняется синхронно. В противном случае ваш синтаксис хорош - как показал ваш тест на консольном вызове.

...