测试一个的内容 在含有酶的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。
如果我们谈论测试实现,我会使用Jest和toMatchSnapshot
方法检查两种情况下的渲染结果。
以上是关于测试一个的内容 在含有酶的React组分中的主要内容,如果未能解决你的问题,请参考以下文章