Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jasmine 在React测试中找到焦点元素_Jasmine_Reactjs - Fatal编程技术网

Jasmine 在React测试中找到焦点元素

Jasmine 在React测试中找到焦点元素,jasmine,reactjs,Jasmine,Reactjs,我在一个简单的茉莉花测试中设置一个元素的焦点 但是当我用 document.activeElement 始终是元素处于焦点位置。我猜这可能是因为元素没有获得焦点,或者文档没有引用real文档 我已经尝试在没有任何运气的情况下使用抓取活动元素: node.ownerDocument.activeElement 为什么文档的活动元素没有改变?您没有向我们提供有关测试的全部信息,但我假设您使用的是TestUtils.renderIntoDocument(),如果是这种情况,那么这就是您遇到此问题的

我在一个简单的茉莉花测试中设置一个元素的焦点

但是当我用 document.activeElement 始终是
元素处于焦点位置。我猜这可能是因为元素没有获得焦点,或者文档没有引用real文档

我已经尝试在没有任何运气的情况下使用抓取活动元素:

node.ownerDocument.activeElement

为什么文档的活动元素没有改变?

您没有向我们提供有关测试的全部信息,但我假设您使用的是
TestUtils.renderIntoDocument()
,如果是这种情况,那么这就是您遇到此问题的原因

请记住,
TestUtils.renderIntoDocument()
将组件渲染到分离的DOM节点中。因此,在不使用另一个
TestUtils
函数的情况下,很难测试聚焦/模糊节点的功能,或者通过类名或ID查找节点,该函数使用您提供的分离DOM节点

例如,假设您有一个如下所示的示例组件:

var Foo = React.createClass({
    render : function () {
        return (
            <div className='foo'>
                Sample Component
            </div>
        )
    }
});
it('renders a div with className of "foo"', function () {
    var foo = TestUtils.renderIntoDocument(<Foo />); //creates detached DOM node
    var array1 = TestUtils.scryRenderedDOMComponentsWithClass(foo, 'foo');
    var array2 = document.getElementsByClassName('foo');
    expect(array1.length).toEqual(1); //passes
    expect(array2.length).toEqual(1); //fails
});
it('renders a div with className of "foo"', function () {
    var jasmineReact = require('jasmine-react-helpers');
    var foo = jasmineReact.render(<Foo />, document.body);
    var array1 = TestUtils.scryRenderedDOMComponentsWithClass(foo, 'foo');
    var array2 = document.getElementsByClassName('foo');
    expect(array1.length).toEqual(1); //passes
    expect(array2.length).toEqual(1); //passes
});
我想值得一提的是,jasmine react回购协议的所有者并没有积极维护它(至少在我写这篇文章的时候是这样),但它似乎暂时有效


希望这有帮助

这就是问题所在!感谢您的详细回复,即使我的描述非常简短。我会在每次测试后使用jasmine react或react.render进行DOM清理。很高兴为您提供帮助!如果您选择后者,我建议在每个之前定义一个
,在每个
之后定义一个
,分别执行
React.render()
React.unmountComponentAtNode()
。事实上,如果你看一下jasmine react的来源,那基本上也是那里发生的事情。
it('renders a div with className of "foo"', function () {
    var jasmineReact = require('jasmine-react-helpers');
    var foo = jasmineReact.render(<Foo />, document.body);
    var array1 = TestUtils.scryRenderedDOMComponentsWithClass(foo, 'foo');
    var array2 = document.getElementsByClassName('foo');
    expect(array1.length).toEqual(1); //passes
    expect(array2.length).toEqual(1); //passes
});