1

您如何为您的应用程序使用的库创建手动模拟?

我正在尝试在笑话文档中遵循范围模拟,但没有运气。

例子:

my-workspace
├── __mocks__
│   └── @my-workspace/my-lib.ts
├── apps
│   ├── my-app
│       └── index.ts
├── libs
│   ├── my-lib
│       └── index.ts
...
4

1 回答 1

0

libs由于其TS 路径映射,可以像常规 node_modules 一样导入 nx 工作区中的文件(检查您的问题tsconfig.base.json以了解如何@workspace-scope/my-lib解决)。

但是,您的 lib 不是每个说的节点模块(即使您发布它),应该使用“用户模块”开玩笑模式来模拟:https ://jestjs.io/docs/manual-mocks#mocking-user -模块

将模拟移动到libs/my-lib/__mocks__/index.ts代替(如果需要,您可以将模拟拆分为多个文件,只需确保从索引文件中导出需要模拟的任何内容)然后在导入 lib 函数jest.mock('@workspace-scope/my-lib');的文件中手动调用:spec

// libs/my-lib/__mocks__/index.ts
export function foo(): string {
  return 'foo';
}
// apps/my-app/.../some-test.spec.ts
import { foo } from '@workspace-scope/my-lib';

// manually mock the user module: make sure the path matches the import above
jest.mock('@workspace-scope/mylib');
// --> now when you invoke foo() in this file, jest should invoke "foo" exported from "libs/my-lib/__mocks__/index.ts" instead

describe('test foo', () => {
  test('returns "foo"', () => {
    expect(foo()).toBe('foo');
  });
});
于 2021-09-27T13:16:33.327 回答