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

问题描述 投票:9回答:1

我写了一个简单的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

javascript reactjs iframe sinon enzyme
1个回答
-3
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.