我有一个jest的测试文件,其中包含许多测试。
import React from 'react'; import configureStore from 'redux-mock-store'; import {Provider} from "react-redux"; import renderer from "react-test-renderer"; import HTML5Backend from "react-dnd-html5-backend"; import {DragDropContextProvider} from "react-dnd";
describe('My Component Tests', () => { let mockStore; let store;
beforeEach(() => {
mockStore = configureStore();
store = mockStore(mockData);
});
test(' test1', () => {
const cmpt = <Provider store={store}>
<DragDropContextProvider backend={HTML5Backend}>
<MyComponent state={1}/>
</DragDropContextProvider>
</Provider>;
const tree = renderer.create(cmpt).toJSON();
expect(tree).toMatchSnapshot();
});
test(' test2', () => {
const cmpt = <Provider store={store}>
<DragDropContextProvider backend={HTML5Backend}>
<MyComponent state={2}/>
</DragDropContextProvider>
</Provider>;
const tree = renderer.create(cmpt).toJSON();
expect(tree).toMatchSnapshot();
});
}); 第一次测试始终有效
但是后续的总是会出现此错误:
Error: Uncaught [Error: Cannot have two HTML5 backends at the same time.] 我猜这是因为HTMLBackend被视为单例,并且在测试中使用,这不是我想要的。我想要独立运行的测试。
是否有一些在beforeEach()函数中创建HTMLBackend实例的方法。
我试图将HTML5Backend封装为一个单例,但是我遇到了同样的问题:
let html5Backend = null;
function getSingleton() { if (!html5Backend) { html5Backend = HTML5Backend; debugger; } return html5Backend; }
我通过在“描述”级别引用HTMLBackend实例来解决此问题,如下所示:
describe('My Component Tests', () => { let mockStore; let store;
let htmlbe = HTML5Backend; //reference instance here!!!
beforeEach(() => {
mockStore = configureStore();
store = mockStore(mockData);
});
test(' test1', () => {
const cmpt = <Provider store={store}>
<DragDropContextProvider backend={htmlbe }>
<MyComponent state={1}/>
</DragDropContextProvider>
</Provider>;
const tree = renderer.create(cmpt).toJSON();
expect(tree).toMatchSnapshot();
});
test(' test2', () => {
const cmpt = <Provider store={store}>
<DragDropContextProvider backend={htmlbe }>
<MyComponent state={2}/>
</DragDropContextProvider>
</Provider>;
const tree = renderer.create(cmpt).toJSON();
这相当于在所有测试中都有一个单例。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。