我正在尝试为一个react组件编写一个测试,该组件在安装后发出一个 fetch GET 请求。测试只需要检查组件是否已呈现,当 fetch 运行时我得到这个:ReferenceError: fetch is not defined
。我四处搜索,似乎找不到任何可以解决我的问题的东西。我正在使用 jest 和 Test Utils 来测试组件。
我的组件代码:
export class Home extends Component {
constructor(props) {
...
}
componentDidMount() {
fetch('/some/path', {
headers: {
'Key1': 'Data1',
'Key2': Data2
}
}).then(response => {
if (response.status == 200) {
response.json().then((data) => {
this.context.store.dispatch(setAssets(data))
}
);
} else {
return (
<Snackbar
open={true}
message={"ERROR: " + str(response.status)}
autoHideDuration={5000}
/>
);
}
}).catch(e => {});
...
);
}
componentWillUnmount() {
...
}
logout(e) {
...
}
render() {
return (
<div>
<AppBar
title="Title"
iconElementLeft={
<IconButton>
<NavigationClose />
</IconButton>
}
iconElementRight={
<IconMenu
iconButtonElement={
<IconButton>
<MoreVertIcon />
</IconButton>
}
targetOrigin={{
horizontal: 'right',
vertical: 'top'
}}
anchorOrigin={{
horizontal: 'right',
vertical: 'top'
}}
>
<MenuItem>
Help
</MenuItem>
</IconMenu>
}
/>
{
this.context.store.getState().assets.map((asset, i) => {
return (
<Card
title={asset.title}
key={i+1}
/>
);
})
}
</div>
);
}
}
Home.contextTypes = {
store: React.PropTypes.object
}
export default Home;
我的测试代码:
var home
describe('Home', () => {
beforeEach(() => {
let store = createStore(assets);
let a = store.dispatch({
type: Asset,
assets: [{
'id': 1,
'title': 'TITLE'
}],
});
store.getState().assets = a.assets
home = TestUtils.renderIntoDocument(
<MuiThemeProvider muiTheme={getMuiTheme()}>
<Provider store={store}>
<Home />
</Provider>
</MuiThemeProvider>
);
});
it('renders the main page, including cards and appbar', () => {}
尝试将 Home 渲染为文档时出错。
我尝试过fetch-mock ,但这仅允许模拟调用进行 API 测试,我不想这样做,也不会模拟组件中的 fetch 调用。
Mocking Home 不起作用,因为它是我要测试的组件。除非有办法模拟componentDidMount()
我错过的功能。
我只需要一个 fetch 调用的解决方法。有任何想法吗??
编辑:我使用 React 的 JSX 作为组件,使用 JS 进行测试