我正在使用我自己的微型“虚拟浏览器”实用程序在jsdom下测试我的 React 组件。工作得很好,直到我尝试。例如,在测试儿童年龄输入控件时:setState
describe('rendering according to the draft value', function () {
var component;
beforeEach(function () {
component = TestUtils.renderIntoDocument(
React.createElement(ChildrenInput, {value: []})
);
component.setState({draft: [{age: null}, {age: null}]}, done);
});
it('overrides the value property for the count', function () {
assert.strictEqual(component.refs.count.props.value, 2);
});
it('overrides the value property for the ages', function () {
assert.strictEqual(component.refs.age1.props.value, null);
});
});
…在setState
我得到的线上:
未捕获的错误:不变违规:dangerouslyRenderMarkup(...):无法在工作线程中呈现标记。在单元测试时需要 React 或使用 React.renderToString 进行服务器渲染之前,请确保window
并在全球范围内可用。document
我知道全局变量确实是由 jsdom-based 设置的window
,如下所示:document
TestBrowser
global.document = jsdom.jsdom('<html><body></body></html>', jsdom.level(1, 'core'));
global.window = global.document.parentWindow;
我什至试图包装setState
成setTimeout(..., 0)
. 它没有帮助。如何使测试状态更改起作用?