Mic*_*ker 8 javascript node.js karma-runner reactjs
我的应用程序中有很多组件可以响应不同的按键操作,到目前为止,我的测试都没有使用任何TestUtils.Simulate.keyDown工作.看起来keyDown简单明了不起作用.
这是我正在尝试测试的组件:
var React = require('react/addons');
var Description = React.createClass({
render : function () {
return (
<div className="description">
<input type="text" ref="input"/>
</div>
)
}
});
module.exports = Description;
Run Code Online (Sandbox Code Playgroud)
这是一个失败的简单测试:
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;
var expect = require('expect');
var Description = require('../description');
describe('Description', function () {
it('updates input value on key press', function () {
var description = TestUtils.renderIntoDocument(<Description/>);
var input = React.findDOMNode(description.refs.input);
expect(input.value).toEqual(''); //This passes
TestUtils.Simulate.keyDown(input, {key : "a"});
expect(input.value).toEqual('a'); //This fails
});
});
Run Code Online (Sandbox Code Playgroud)
我有多个依赖的测试TestUtils.Simulate.keyDown.这些测试尝试按下大量不同的键(Enter是最突出的),但它们都不起作用.我已经尝试使用,keyPress并且keyUp不知道这些功能是否甚至存在(对于令人惊讶的不完整的文档而言).
我只是错误地使用了这个功能吗?或者这里有什么不对吗?
我通过npm使用karma-cli来运行我的测试,如果这有所不同.
Mic*_*ker 10
我最终弄明白了这个问题.
TestUtils.Simulate.keyDown(input, {key : "a"});
Run Code Online (Sandbox Code Playgroud)
此行将事件发送到正确的DOM节点,但事件数据实际上不包含a keyCode,这是代码正在查找的内容.为什么官方文档明确说明你应该使用key超出我的范围.
为使其正常运行,需要进行以下修改:
TestUtils.Simulate.keyDown(input, {keyCode : 65});
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助其他有类似问题的人.