【发布时间】:2015-04-03 16:54:48
【问题描述】:
我正在尝试测试基于一些临时 React 元素构建的自定义 React 元素 代码:
return (
React.createElement("div", {className: classes},
React.createElement(TextField, {
ref: "omniTextBox",
className: "menu-textfield",
onChange: this._onControlChange
}),
)
);
this._onControlChange 根据文本字段值操纵状态。这是我想要测试的,文本字段的不同输入会触发组件的不同状态。
笑话代码:
var customComponent = TestUtils.renderIntoDocument( <CustomField /> );
var customField = TestUtils.findRenderedComponentWithType(customComponent, customField);
TestUtils.Simulate.change(customField, {target: {value: 'Hello, world'}});
我试图模拟 _onControlChange 的函数,看看它是否被调用,它被调用了 0 次。我还尝试在模拟()调用之前和之后查看 customField var 的状态,但没有任何变化。我想知道我是否遗漏了一些东西来模拟在文本字段中输入
我已经尝试了按标签、类型和类进行选择的所有选项,但均未成功。当 console.log 渲染组件时,我可以看到 textfield 元素。有没有办法通过 ref 获取 TextField 的实例?
【问题讨论】:
-
更改事件是在
TextField组件上处理的,而不是customField,对吧?我会尝试findRenderedComponentWithType(..., TextField)。要记住的另一件事是,在 React 0.12+ 中,您需要在自定义 JSX 组件中使用<InitialCapitals>或 JSX 将它们视为 HTML(所以<CustomField />而不是<customField />) -
@BinaryMuse 我的代码遵循初始大写字母,我不擅长为问题编写代码。这似乎不是问题。
标签: javascript reactjs jestjs