ReactTestUtils
使你在你选择的测试框架中 (我们使用 Jest) 测试 React 组件变得容易。
var ReactTestUtils = require('react-addons-test-utils');
Simulate.{eventName}(
DOMElement element,
[object eventData]
)
模拟一个在 DOM 节点上带有可选 eventData
事件数据的事件派遣(event dispatch)。这可能是 ReactTestUtils
里单独最有用的工具。
点击一个元素
// <button ref="button">...</button>
var node = this.refs.button;
ReactTestUtils.Simulate.click(node);
改变 input 域的值然后点击 回车。
// <input ref="input" />
var node = this.refs.input;
node.value = 'giraffe';
ReactTestUtils.Simulate.change(node);
ReactTestUtils.Simulate.keyDown(node, {key: "Enter", keyCode: 13, which: 13});
注意你将必须提供任何你在你的组件里使用的事件属性(例如 keyCode, which, 等等)因为React没有为你创建任何这类东西。
Simulate
has a method for every event that React understands.
ReactComponent renderIntoDocument(
ReactElement instance
)
渲染一个组件到 document 里的 detached DOM 节点。这个函数需要一个 DOM。
注意:
在你 import React 之前,你需要让
window
,window.document
和window.document.createElement
全局可用。 不然 React 会认为它不能访问 DOM 然后类似setState
的方法会不工作。
object mockComponent(
function componentClass,
[string mockTagName]
)
传入一个 mocked 组件模块到这个方法来给它增加有用的方法,使它可以被用作 dummy React 组件。代替像通常一样的渲染,组件会成为一个简单的包含了任意被提供的子级的 <div>
(或者其他 tag 名,如果提供了 mockTagName
)
boolean isElement(
ReactElement element
)
返回 true
如果 element
是任意的 ReactElement。
boolean isElementOfType(
ReactElement element,
function componentClass
)
返回 true
如果 element
是一个类型是 React componentClass
的 ReactElement。
boolean isDOMComponent(
ReactComponent instance
)
返回 true
如果 instance
是一个 DOM 组件 (比如一个 <div>
或者 <span>
)。
boolean isCompositeComponent(
ReactComponent instance
)
返回 true
如果 instance
是一个复合组件 (由 React.createClass()
创建)。
boolean isCompositeComponentWithType(
ReactComponent instance,
function componentClass
)
返回 true
如果 instance
是一个类型为 React componentClass
的复合组件 (由 React.createClass()
创建)。
array findAllInRenderedTree(
ReactComponent tree,
function test
)
遍历 tree
里所有的组件,并累积所有 test(component)
为 true
的组件。它本身并没有什么用,但是它被用作其他测试工具的基本元素。
array scryRenderedDOMComponentsWithClass(
ReactComponent tree, string className
)
在渲染的树中查找所有 DOM组件的类名匹配className
的组件实例。
ReactComponent findRenderedDOMComponentWithClass(
ReactComponent tree,
string className
)
类似 scryRenderedDOMComponentsWithClass()
除了只有一个返回结果,并且要么返回这个结果,要么如果还有其他的匹配项就抛出一个异常。
array scryRenderedDOMComponentsWithTag(
ReactComponent tree,
string tagName
)
在渲染的树中查找所有 DOM 组件的 tag 名匹配 tagName
的组件实例。
ReactComponent findRenderedDOMComponentWithTag(
ReactComponent tree,
string tagName
)
类似 scryRenderedDOMComponentsWithTag()
除了只有一个返回结果,并且要么返回这个结果,要么如果还有其他的匹配项就抛出一个异常。
array scryRenderedComponentsWithType(
ReactComponent tree,
function componentClass
)
查找所有类型等于 componentClass
的组件实例。
ReactComponent findRenderedComponentWithType(
ReactComponent tree, function componentClass
)
类似 scryRenderedComponentsWithType()
除了只有一个返回结果,并且要么返回这个结果,要么如果还有其他的匹配项就抛出一个异常。
浅渲染是一个实验性特性,让你渲染一个组件为 "one level deep" 并且断言渲染方法返回的内容,不用担心子组件的行为,它们没有被实例化或者渲染。这个方式不需要一个 DOM。
ReactShallowRenderer createRenderer()
在你的测试里调用它来创建一个浅渲染器。你可以把它想做是一个你渲染你要测试的组件的 "地方",它可以自己响应事件并更新。
shallowRenderer.render(
ReactElement element
)
类似于 ReactDOM.render
。
ReactElement shallowRenderer.getRenderOutput()
在 render
被调用后,返回一个浅渲染的输出。你可以接着断言输出的内容。例如,如果你的组件的渲染方法返回:
<div>
<span className="heading">Title</span>
<Subcomponent foo="bar" />
</div>
然后你可以断言:
var renderer = ReactTestUtils.createRenderer();
result = renderer.getRenderOutput();
expect(result.type).toBe('div');
expect(result.props.children).toEqual([
<span className="heading">Title</span>,
<Subcomponent foo="bar" />
]);
浅测试现在有一些限制,即不支持 refs。我们在早期发布这个特性,并感激 React 社区关于它应该如何演化的反馈。