在单元测试

时间:2016-10-03 19:11:27

标签: javascript unit-testing reactjs jestjs

React的新手,如果这是一个无知的问题,请提前道歉。我使用componentWillReceiveProps来执行渲染后的函数。该函数作为prop传递。尝试编写一个单元测试来显示传入的函数被调用,但是当我在测试中渲染组件时,似乎没有调用componentWillReceiveProps。它在浏览器中运行应用程序时有效,但不在测试中。

以下是测试:

it('should call function \'selectAll\' when isDefaultSelectAll is true and component is rendered.', ()=> {
    const selectAllMock = jest.genMockFunction();
    const isDefaultSelectAll = true;
    component = TestUtils.renderIntoDocument(<MyComponent {isDefaultSelectAll, selectAllMock} />);;
    expect(selectAllMock.mock.calls.length).toBe(1);
});

这是正在测试的代码:

componentWillReceiveProps(nextProps) {
   console.log('GOT HERE');
   if (nextProps.isDefaultSelectAll === true) {
       nextProps.selectAll();
   }
}

即使是日志声明似乎也没有被击中,我也不确定为什么。谷歌搜索没有得出答案。

编辑第一个答案 - 尝试按如下方式进行第二次渲染,但仍然没有运气:

const isDefaultSelectAll = false; 
component = TestUtils.renderIntoDocument(<MyComponent {isDefaultSelectAll, selectAllMock} />); 
isDefaultSelectAll = true; 
component = TestUtils.renderIntoDocument(<MyComponent {isDefaultSelectAll, selectAllMock} />);

1 个答案:

答案 0 :(得分:0)

在初始渲染中未调用

componentWillReceiveProps,如文档中所述:

https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops

尝试使用其他生命周期方法或在测试中重新渲染组件。