React的TestUtils.Simulate.keyDown不起作用

Mic*_*ker 8 javascript node.js karma-runner reactjs

我的应用程序中有很多组件可以响应不同的按键操作,到目前为止,我的测试都没有使用任何TestUtils.Simulate.keyDown工作.看起来keyDown简单明了不起作用.

这是我正在尝试测试的组件:

description.js

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)

这是一个失败的简单测试:

描述-test.js

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)

我希望这可以帮助其他有类似问题的人.