【发布时间】:2015-02-22 23:42:56
【问题描述】:
我已经设置了一些使用 Mocha 显示表格的 React 组件测试。我可以断言它的初始状态,但我有一个点击事件,它对我想测试的数据进行排序。
如果我使用React.addons.TestUtils.Simulate.click(theComponent) 来尝试测试排序。
- 可以看到事件处理好了,
- 状态更改被触发
- 数据在调用
setState之前排序
但是当我对组件进行断言时,什么都没有改变。
it('sorts the data when the year header is clicked', function() {
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;
var payTable = TestUtils.renderIntoDocument(
<PayTable payYears={data} />
);
var headers = TestUtils.scryRenderedDOMComponentsWithTag(payTable, 'th');
var yearHeader = headers[0];
TestUtils.Simulate.click(yearHeader.getDOMNode());
var columnValues = getYearColumnValues(payTable, TestUtils);
columnValues.should.match([ 'Year', '1066', '1067', '1068' ]);
});
我需要强制更新吗?重新读取组件?
代码在on Github可用。
我可以测试组件的其他方面,但不能测试setState 之后的组件值
【问题讨论】:
-
如果您使用 Mocha 测试 DOM 更改,您可以使用 mochify 来提供帮助。我在 wiki 上写了一个关于如何测试 ReactJS 组件的示例,这可能会有所帮助:github.com/mantoni/mochify.js/wiki/…
-
如果您不想使用 setTimeout hack 或其他库。尝试为您的事件创建回调。例如 Paytable 上的 YearHeaderSelected 或类似内容。然后你可以把它传入并在你的测试中响应它
标签: javascript mocha.js reactjs