Nest.js无法在单元测试中解决Mongoose模型的依赖性

问题描述 投票:0回答:1

为控制器编写单元测试时,Nest无法解析我的Mongoose模型依赖项:

嵌套无法解析UsersService的依赖关系(?)。请做出来确保索引[0]处的参数USER_MODEL在_RootTestModule上下文。

Potential solutions:
- If USER_MODEL is a provider, is it part of the current _RootTestModule?
- If USER_MODEL is exported from a separate @Module, is that module imported within _RootTestModule?
  @Module({
    imports: [ /* the Module containing USER_MODEL */ ]
  })

我的模型通过我的服务构造函数注入到users.service.ts中:

import { IUserModel } from './interfaces';
import { Model } from 'mongoose';
import { USER_MODEL } from './constants/users.constants';

@Injectable()
export class UsersService {

  constructor (
    @Inject(USER_MODEL)
    private readonly userModel: Model<IUserModel>,
  ) {}

  ...
}

我的测试定义为:

const mockUserModel = {};

describe('Users Controller', () => {
  let usersController: UsersController;
  let usersService: UsersService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [UsersController],
      providers: [
        {
          provide: getModelToken(USER_MODEL),
          useValue: mockUserModel,
        },
        UsersService,
      ],
    }).compile();

    usersController = module.get<UsersController>(UsersController);
    usersService = module.get<UsersService>(UsersService);
  });

  it('should define user controller and service', () => {
    expect(usersController).toBeDefined();
    expect(usersService).toBeDefined();
  });
});

所有这些类都在同一模块中定义。我不太确定Nest在寻找什么。我在https://docs.nestjs.com/fundamentals/testing处遵循指南,并且也浏览了一些较老的Github问题。

我也尝试过按照以下定义创建自定义类提供程序:https://docs.nestjs.com/fundamentals/custom-providers以提供类型化的Mongoose模型,但是返回了相同的错误。

有人可以帮我吗?

node.js nestjs
1个回答
0
投票

如果使用@Inject(USER_MODEL),则需要在测试中使用provide: USER_MODEL。如果使用getModelToken而不是原始的@InjectModel(),则@Inject()实用程序方法是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.