【发布时间】:2019-08-11 11:51:17
【问题描述】:
此测试在我使用 withSnackbar 之前通过。但现在它失败了,我真的不知道如何解决这个问题。因此,任何帮助将不胜感激。谢谢。
这是我在组件中的导出:
export default withSnackbar(StoryApp)
这是我的测试:
let story = {
Title: "title 1",
body: "body 1",
UserEntityKey: "userEntityKey",
Key: "storyKey"
}
afterEach(() => {
// cleaning up the mess left behind the previous test
MockAxios.reset();
});
test('Story deletes based on mocked backend response', async () => {
window.confirm = jest.fn()
window.confirm.mockReturnValue(1);
let idToken = "asdf"
MockAxios.delete.mockImplementationOnce(() =>
Promise.resolve(story.Key)
)
const storyApp = shallow(<StoryApp />);
storyApp.setState((prev) => {
prev.data.push(story)
return prev
})
// Test without idToken
await storyApp.instance().deleteStory(story)
expect(MockAxios.delete).not.toHaveBeenCalled();
expect(storyApp.state().data.length).toEqual(1)
// Test with idToken
storyApp.setState((prev) => {
prev.user = { idToken: idToken }
return prev
})
await storyApp.instance().deleteStory(story)
expect(MockAxios.delete).toHaveBeenCalledWith(apiUrl + '?key=' + story.Key, { headers: { 'Authorization': idToken } });
expect(storyApp.state().data.length).toEqual(0)
})
这是输出:
● 基于模拟后端响应的故事删除
ShallowWrapper::setState() can only be called on class components
101 | const storyApp = shallow(<StoryApp />);
102 |
> 103 | storyApp.setState((prev) => {
| ^
104 | prev.data.push(story)
105 | return prev
106 | })
at ShallowWrapper.setState (node_modules/enzyme/build/ShallowWrapper.js:639:17)
at Object.setState (__tests__/App.test.js:103:12)
at tryCatch (node_modules/regenerator-runtime/runtime.js:62:40)
at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:288:22)
at Generator.prototype.(anonymous function) [as next] (node_modules/regenerator-runtime/runtime.js:114:21)
at asyncGeneratorStep (__tests__/App.test.js:25:103)
at _next (__tests__/App.test.js:27:194)
at __tests__/App.test.js:27:364
at Object.<anonymous> (__tests__/App.test.js:27:97)
【问题讨论】:
标签: javascript reactjs react-redux jestjs