使用Jest和Sinon的反应测试函数调用不起作用

时间:2018-01-16 17:04:58

标签: javascript reactjs testing sinon jest

我试图断言在事件发生后调用我的React类方法的次数。我尝试过使用sinon.spy和jest.fn()无济于事。

使用sinon.spy:

test('Some test', (done) => {
  const page = renderLookupPage();
  const formInputButton = page.find('.button').first();
  formInputButton.simulate('click');

  let spy = sinon.spy(page.instance().myReactMethod);

  const button = page.find('.tag').first();
  button.simulate('click');

  setTimeout(() => {
        try {
            console.log(spy.callCount); //0
          done();
        } catch (error) {
          done.fail(error);
        }
      }, 100);
    });

使用jest.fn():

test('Some test', (done) => {
  const page = renderLookupPage();
  const formInputButton = page.find('.button').first();
  formInputButton.simulate('click');

  page.instance().myReactMethod = jest.fn(() => {});

  const button = page.find('.tag').first();
  button.simulate('click');

      setTimeout(() => {
        try {
            console.log(page.instance().myReactMethod.mock.calls.length); //0
          done();
        } catch (error) {
          done.fail(error);
        }
      }, 100);
    });

我确信有问题的方法肯定会被调用。更令人困惑的是方法中的console.log语句在

之前打印
  

的console.log(spy.callCount)

任何正确方向的指针都将受到高度赞赏!干杯!

1 个答案:

答案 0 :(得分:0)

解决方案很简单,

我移动了行

  

page.instance()。myReactMethod = jest.fn(()=> {});

在上一行之上:

  

formInputButton.simulate('单击&#39);

不确定为什么会这样,并且很高兴听到某人为什么会影响结果?

注意:formInputButton不会调用有问题的函数