首页 > 解决方案 > 请确保索引 [0] 处的参数 ContactRepository 在 RootTestModule 上下文中可用

问题描述

我正在尝试通过 Nest 测试一个类。在这个类中(参见下图),编写类的人通过 typeorm 创建一个存储库。

在此处输入图像描述

当我尝试测试“createContact”函数时,出现以下错误:“Nest 无法解析 ContactService (?) 的依赖项。请确保索引 [0] 处的参数 ContactRepository 在 AuthModule 上下文中可用”。

这是我的测试课:

在此处输入图像描述

您知道如何使测试考虑到这一点,因此不再出现错误吗?

非常感谢!

标签: typescriptjestjsnestjs

解决方案


您需要为要注入的值提供一个实现@InjectRepository(Contact)。幸运的是,Nest 提供了一种方法来获取注入令牌正在使用的内容getRepositoryToken()。有了这个,您可以创建一个自定义提供程序来提供将在实际实现的地方使用的令牌和模拟。测试设置如下所示:

beforeEach(async () => {
  const module = await Test.createTestingModule({
    providers: [
      ContactService,
      {
        provide: getRepositoryToken(Contact),
        useValue: {
          save: jest.fn().mockResolvedValue(mockContact),
          find: jest.fn().mockResolvedValue([mockContact]),
        },
      },
    ],
  }).compile();
});

save你可以为and提供任何你想要的东西find,但是这样做你还可以检查传递给模拟的内容,以及它们被调用的次数(如果你正在观看模拟)。

您可以在此处找到更多示例


推荐阅读