测试一个的内容 在含有酶的React组分中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试一个的内容 在含有酶的React组分中相关的知识,希望对你有一定的参考价值。

我写了一个简单的React组件,它呈现了一个<iframe>

export class Iframe extends React.component {
   render() {
        return <iframe src={ this.props.src } />;
    }
}

我试图通过检查加载src的内容是否在<iframe>中正确填充来测试它。为了做到这一点,我尝试访问frame.contentWindow,但在用酶安装后,它总是返回undefined

我试图用Sinon <iframe>嘲笑FakeXMLHttpRequest的内容:

server = sinon.fakeServer.create();
server.respondWith('GET', 'test', [200, { 'Content-Type': 'text/html' }, '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><div class="myClass">Amazing Unicorn</div></body></html>']);
container = mount(<Iframe src='test' />);

<iframe src='data:text/html' >

const src = 'data:text/html;charset=utf-8,<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><div class="myClass">Amazing Unicorn</div></body></html>';
container = mount(<Iframe src={ src } />);

但在两种情况下用酶测试:

container = mount(<Iframe src='...' />);
container.instance().contentWindow // equals 'undefined'
container.find('iframe').contentWindow // equals 'undefined'

当提供有效的src属性时,该组件在浏览器上按预期工作和呈现。有没有办法在使用酶(或任何其他测试框架)的React测试中访问contentWindow

答案

如果您正在编写单元测试(我认为这就是您正在做的事情),您应该测试行为,而不是实现细节。

如果我必须为这样的组件编写测试,我会使用这样的smth:

  • 积极场景:组件使用传递的src呈现iframe
  • 否定场景:如果没有在props中传递src,则组件呈现null(取决于业务逻辑)

此测试处理两者:正确和不正确的行为。有关详细信息,请参阅Defensive programming

如果我们谈论测试实现,我会使用JesttoMatchSnapshot方法检查两种情况下的渲染结果。

以上是关于测试一个的内容 在含有酶的React组分中的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

书中代码-自己写写测试

利用JaCoCo统计接口测试中代码覆盖率

Chrome 和 Safari 中代码镜像块的高度不同

mac环境下,pycharm中代码多行注释或取消注释

MVVM 模式中代码隐藏的实用使用