【发布时间】:2021-01-10 04:45:34
【问题描述】:
我有一个正在测试提供程序的测试,它使用 react-router 6 useLocation
"react-router-dom": "^6.0.0-beta.0",
当我在文件中模拟时它工作正常
import React from 'react';
import { render } from '@testing-library/react';
import Categories from './Categories';
import mockCategories from '../../__mocks__/mockCategories';
import ExpenditureProvider from '../../domains/Expenditure/ExpenditureProvider';
jest.mock('react-router-dom', () => {
const originalModule = jest.requireActual('react-router-dom');
return {
__esModule: true,
...originalModule,
useNavigate: jest.fn(),
useLocation: jest.fn().mockReturnValue({ pathname: '/'}),
};
});
describe('Categories', () => {
test('should render Categories component', () => {
const categories = render(
<ExpenditureProvider>
<Categories categories={mockCategories}/>
</ExpenditureProvider>
);
});
});
但是当我尝试将其放入__mocks__ 目录时,这是我得到的错误
Error: Uncaught [Error: useLocation() may be used only in the context of a <Router> component.]
// __mocks__/react-router-dom.js
const originalModule = jest.requireActual('react-router-dom');
export default {
__esModule: true,
...originalModule,
useLocation: jest.fn().mockReturnValue({ pathname: '/'}),
useNavigate: jest.fn()
}
mock 文件在 node_modules 的根目录下
├── __mocks__
│ └── react-router-dom.js
├── node_modules
├── src
│
我想做的只是从__mocks__ 目录模拟,因为这个模拟用于多个测试
【问题讨论】:
-
请用确切的错误信息更新问题,而不是模糊的it doesn't work语句,它可能对有类似问题的用户有所帮助。
-
@EstusFlask 这是我得到的错误 Error: Uncaught [Error: useLocation() may be used only in the context of a
component.],你读过这个问题了吗?!我已将其移动以使其更清晰 -
谢谢。不清楚该错误是指您使用
__mocks__而不是根本没有模拟的场景。
标签: reactjs unit-testing react-router jestjs