相关疑难解决方法(0)

将TypeORM存储库注入NestJS服务以进行模拟数据测试

有关如何在本期中执行此操作的讨论很长时间。

我已经尝试了许多建议的解决方案,但是运气并不好。

谁能提供一个具体示例,说明如何使用注入的存储库和模拟数据测试服务?

javascript node.js typescript nestjs

9
推荐指数
4
解决办法
4072
查看次数

如何在Service构造函数中对Controller和模拟@InjectModel进行单元测试

我在对控制器进行单元测试时遇到问题,并收到错误消息“嵌套无法解决我的服务依赖性”。

为了获得最大的覆盖范围,我想对控制器和相应的服务进行单元测试,并希望模拟像猫鼬连接之类的外部依赖项。同样,我已经尝试了以下链接中提到的建议,但没有发现任何运气:

https://github.com/nestjs/nest/issues/194#issuecomment-342219043

请在下面找到我的代码:

export const deviceProviders = [
    {
        provide: 'devices',
        useFactory: (connection: Connection) => connection.model('devices', DeviceSchema),
        inject: ['DbConnectionToken'],
    },
];


export class DeviceService extends BaseService {
    constructor(@InjectModel('devices') private readonly _deviceModel: Model<Device>) {
        super();
    }

    async getDevices(group): Promise<any> {
        try {
            return await this._deviceModel.find({ Group: group }).exec();
        } catch (error) {
            return Promise.reject(error);
        }
    }
}


@Controller()
export class DeviceController {
    constructor(private readonly deviceService: DeviceService) {
    }

   @Get(':group')
   async getDevices(@Res() response, @Param('group') group): Promise<any> {
        try {
            const result …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js jestjs nestjs

2
推荐指数
1
解决办法
1831
查看次数

将同一提供程序的两个实例嵌套JS

嗨,在一个测试套件上,我看来我有两个同一提供者的活动实例,一个实例用于实现,另一个实例用于实际实现。

我的结论基于这样一个事实:在测试中,我尝试用jest.fn调用替换方法,但仍然在我测试的服务上,该方法仍指向原始实现。

更奇怪的是,我能够模拟另一个执行完全相同的过程的服务,好像取决于这些服务的注入方式(它们来自容器图中的位置)是否起作用。

我将尝试分享一些片段,但是,当然,只有一个很小的回购实际上可以重现它,但是也许有人有一个见解:

 beforeAll(async done => {
    app = await Test.createTestingModule({
      imports: [
        SOME_MODULES,
      ],
      providers: [
        EssayApplicationService,
        ReviewFacade,
        ExamCacheResultService,
      ],
    }).compile();

    essayApplicationService = app.get<EssayApplicationService>(EssayApplicationService)
    reviewFacade = app.get<ReviewFacade>(ReviewFacade)
    examCacheResult = app.get<ExamCacheResultService>(ExamCacheResultService)
    await app.init()
    done()
  })
Run Code Online (Sandbox Code Playgroud)
it('should invoke review only once', async done => {

    reviewFacade.startReview = jest.fn() --> this works
    examCacheResult.clearCachedResult = jest.fn() --> this fails

    await essayApplicationService.finishApplication()

    expect(reviewFacade.startReview).toHaveBeenCalledTimes(1)
    expect(reviewFacade.startReview).toHaveBeenCalledWith(expect.objectContaining({ id: 1 }))
    expect(examCacheResult.clearCachedResult).toHaveBeenCalledTimes(1) ---> here this fails, although it's called!!
Run Code Online (Sandbox Code Playgroud)

因此,问题归结为以下事实:对于测试中的服务调用了这两种方法,我100%表示肯定,但是由于某种原因第二种方法并未被模拟代替

javascript node.js typescript jestjs nestjs

1
推荐指数
1
解决办法
609
查看次数

标签 统计

nestjs ×3

node.js ×3

javascript ×2

jestjs ×2

typescript ×2

unit-testing ×1