使用渲染渲染测试无状态反应组件中的交互

时间:2016-02-26 12:53:05

标签: javascript reactjs

我有一个无状态组件,我想测试

const PageSizer = ({itemsPerPage, onItemsPerPageChange}) => (
    <form>
       <label>Items Per Page </label>
       <select value={itemsPerPage} onChange={(e) => {onItemsPerPageChange(e.target.value) }}>
           <option value="10">10</option>
           <option value="25">25</option>
           <option value="50">50</option>
           <option value="100">100</option>
       </select>
   </form>)

我想测试一下,当select值改变时,它会触发带有选项值的onItemsPerPageChange回调。

我通过反复试验发现,renderIntoDocument并不像无状态组件那样工作。

使用浅渲染我如何测试?

我想出了

it('should call onItemsPerPageChange when select value is changed', () => {

    var spy = expect.createSpy();

    var shallowRenderer = TestUtils.createRenderer();
    shallowRenderer.render(<PageSizer onItemsPerPageChange={spy}  />)
    var result = shallowRenderer.getRenderOutput();

    var select = result.props.children[1]
    TestUtils.Simulate.change(select, { target: { value: 25 } });

    expect(spy).toHaveBeenCalledWith(25)
});

但间谍从未打过电话。我这样做了吗?

1 个答案:

答案 0 :(得分:1)

我设法通过直接调用onChange道具来实现它

select.props.onChange({ target: { value: 25 } })

正如我注意到他们使用了https://github.com/facebook/react/blob/master/src/test/tests/ReactTestUtils-test.js

中的点击事件