Javascript 单元测试:如何在react中模拟document.getElementById()?
我想用jest测试以下代码 没有人知道如何模拟document.getElementById()Javascript 单元测试:如何在react中模拟document.getElementById()?,javascript,reactjs,unit-testing,dom,jestjs,Javascript,Reactjs,Unit Testing,Dom,Jestjs,我想用jest测试以下代码 没有人知道如何模拟document.getElementById() if (document.getElementById('estateList')) { render( <Provider store={store}> <EstateList /> </Provider>, window.document.getElementById('estat
if (document.getElementById('estateList')) {
render(
<Provider store={store}>
<EstateList />
</Provider>,
window.document.getElementById('estateList')
);
}
if (document.getElementById('articleList')) {
render(
<Provider store={store}>
<ArticleList />
</Provider>,
window.document.getElementById('articleList')
);
}
if (document.getElementById('articleDetail')) {
render(
<Provider store={store}>
<ArticleDetail />
</Provider>,
window.document.getElementById('articleDetail')
);
}
if(document.getElementById('estateList')){
渲染(
,
window.document.getElementById('estateList'))
);
}
if(document.getElementById('articleList')){
渲染(
,
window.document.getElementById('articleList')
);
}
if(document.getElementById('articleDetail')){
渲染(
,
window.document.getElementById('articleDetail')
);
}
我想我可以把render放在一个函数中,比如:
function estateList() {
render(
<Provider store={store}>
<EstateList />
</Provider>,
window.document.getElementById('estateList')
);
}
函数estateList(){
渲染(
,
window.document.getElementById('estateList'))
);
}
然后只需测试estateList(),而不模拟document.getElementById(),但是否仍然可以模拟document.getElementById()?使用create mockedgetElementById
方法,并替换document
上的方法
if (document.getElementById('estateList')) {
render(
<Provider store={store}>
<EstateList />
</Provider>,
window.document.getElementById('estateList')
);
}
if (document.getElementById('articleList')) {
render(
<Provider store={store}>
<ArticleList />
</Provider>,
window.document.getElementById('articleList')
);
}
if (document.getElementById('articleDetail')) {
render(
<Provider store={store}>
<ArticleDetail />
</Provider>,
window.document.getElementById('articleDetail')
);
}
例如
index.tsx
:
从“React”导入React;
从'react redux'导入{Provider};
从'react dom'导入{render};
从“redux”导入{createStore};
export const store=createStore(()=>0);
export const EstateList=()=>EstateList;
导出常量ArticleList=()=>ArticleList;
导出constarticledetail=()=>ArticleDetail;
函数bootstrap(){
if(document.getElementById('estateList')){
渲染(
,
window.document.getElementById('estateList'),
);
}
if(document.getElementById('articleList')){
渲染(
您可以尝试(如果可能的话)使用ref
.IE,{this.element=element;}}}/>
,而不是使用document.getElementById()
,然后您可以替换document.getElementById()的出现
改为使用此.element
,您的测试也应该可以正常运行。看看。它使创建包装器和探索包装器变得非常容易。