我编写了一个简单的React组件,它呈现< iframe>
:
导出类iframe扩展了React。组件{
 render(){
 return< iframe src = {this.props.src} /&gt ;;
 }
}



 我尝试通过检查 src
加载的内容来测试它已正确填充< iframe>
。
为了做到这一点,我尝试访问 frame.contentWindow
,但在使用Enzyme挂载后它总会返回 undefined
。
我试图用Sinon < iframe> 内容http://sinonjs.org/docs/#fakeServer“rel =”noreferrer“> 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 / ht ml'>
:
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 ='...'/>);&# xA; container.instance()。contentWindow // equals'undefined'
 container.find('iframe')。contentWindow // equals'undefined'

&#xA ;
 当提供有效的 src
属性时,该组件在浏览器上按预期工作和呈现。有没有办法在使用Enzyme(或任何其他测试框架)的React测试中访问 contentWindow
?
答案 0 :(得分:2)
问题仍然存在。答案是jsdom仅为连接的iframe提供contentWindow / contentDocument,默认情况下ase没有连接节点。有一个安装选项可以引导酶连接节点:
el = document.createElement('div');
document.body.appendChild(el);
wrapper = mount(<MyReactNode />, { attachTo: el });
答案 1 :(得分:-3)
如果您正在编写单元测试(我认为这就是您正在做的事情),您应该测试行为,而不是实现细节。
如果我必须为这样的组件编写测试,我会像这样使用smth:
src
src
,则组件呈现为null(取决于业务逻辑)此测试处理两者:正确和错误的行为。有关详细信息,请参阅Defensive programming。
如果我们谈论测试实现,我会使用Jest和toMatchSnapshot
方法检查两种情况下的渲染结果。