setupTests.ts:
jest.mock('hooks', () => ({
useCurrentUser: () => mockOwner,
}));
组件.test.ts:
import * as hooks from 'hooks';
test('delete organization', async () => {
const spy = jest.spyOn(hooks, 'useCurrentUser').mockReturnValueOnce({
...mockOwner,
tenantId: 2,
});
render(
<MockedProvider>
<GeneralSettings organization={{ ...mockOrganization }} />
</MockedProvider>
);
expect(spy).toHaveBeenCalledTimes(1);
expect(await screen.findByTestId('delete-org')).toBeInTheDocument();
});
钩子.ts
export * from './use-current-user.hook';
我的间谍功能不起作用,因为我从组件中的文件导入特定功能
import { useCurrentUser } from 'hooks';
。
仅当我在组件中使用
import * as hooks from 'hooks';
时它才有效
我如何监视我的
useCurrentUser
?
我试图在互联网上找到解决方案,但没有任何地方说明如何覆盖这种情况
尚不清楚
useCurrentUser
的作用,但执行此操作的正常方法是将组件包装在 useCurrentUser
可能挂钩的上下文中。 编者注:这是我认为 hooks 很糟糕的众多原因之一。
我通常会构建一些东西,以便我的逻辑的大部分使用依赖注入,然后如果我觉得仍然有重要的功能需要测试,我会在最顶层进行测试并单独进行测试。
所以我可能有一个
EditUser
组件,它将用户和 setUser
作为道具。然后,我只需检查当用户与 EditUser
交互时,一切看起来都适合编辑过程,并且 setUser
在编辑后接收处于正确状态的用户。对于这么多的功能,我可能不会测试父组件 EditUser
和 useCurrentUser
的集成。但我可能会对 useCurrentUser
以及父级可能用来创建处于正确状态的用户的任何实用程序进行测试,以便在没有现有用户的情况下进入 EditUser
。