我正在尝试使用react-addons-test-utils浅呈现一个React组件(ComponentA),以便我可以快照它。
组件A导入组件B.
组件B导入' jquery'和' jquery-ui / ui / widgets / draggable'这在Jest下运行测试时会导致错误:
FeedOptions.ConsistencyLevel
我试图在package.json中使用setupFiles属性来导入jquery和jquery UI,只取得了部分成功。我得到了这个错误:jQuery is not defined
由于我只想要一个浅层渲染,所以我并不关心组件B中的测试内容,所以我想我可以模拟出jquery和jquery UI。但是,使用Cannot read property 'mouse' of undefined
并不能解决jest.mock('jquery)
错误。
那么,上述任何一种方法都是可行的,还是我需要完全采用不同的方式?
示例代码:
ComponentA.tsx
jQuery is not defined
ComponentB.tsx
import * as React from 'react';
import { AppState } from 'state/appState';
import { ComponentB } from 'components/b';
export class ComponentA extends React.Component<void, AppState> {
public render(): JSX.Element {
return (
<div>
<ComponentB/>
</div>
);
}
}
Test.tsx
import * as React from 'react';
import * as $ from 'jquery';
import 'jquery-ui/ui/widgets/draggable';
export class ComponentB extends React.Component<{}, {}> {
// Lots of stuff with jQuery UI
}
setupFile内容失败
// Failed mocking of jquery
jest.mock('jquery');
jest.mock('jquery-ui/ui/widgets/draggable');
// Test file
import * as React from 'react';
import * as ReactTestUtils from 'react-addons-test-utils';
import { ComponentA } from 'components/a';
describe('ComponentA',
() => {
const shallowRenderer = ReactTestUtils.createRenderer();
it('renders correctly',
() => {
// Act
const tree = shallowRenderer.render(
<ComponentA/>
);
// Assert
expect(tree).toMatchSnapshot();
});
});
答案 0 :(得分:2)
最简单的方法是像这样嘲笑jest.mock('components/b', ()=> ({
ComponentB: () => 'ComponentB'
}))
ComponentB
这会在您的快照中将<ComponentB/>
呈现为{{1}}。请注意,路径是相对于测试文件的。