如何在NestJs中模拟PrismaService for e2e?

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

我在 NestJs 中使用 nestjs-prisma,并且我在 app.module 中导入了 prisma 模块,因此在每个服务中,我都可以在库允许的情况下使用 PrismaService

app.module.ts

import { Module } from '@nestjs/common';
import { PrismaModule } from 'nestjs-prisma';
import { CategoryModule } from './category/category.module';

@Module({
  imports: [PrismaModule.forRoot({ isGlobal: true }), CategoryModule],
})
export class AppModule {}

我想仅针对 CategoryModule 进行 e2e 测试,并且需要模拟 PrismaService,我该怎么做?

jestjs nestjs e2e-testing prisma
1个回答
1
投票

您需要首先mook PrismaModule,然后导入PrismaService,这是一个示例。

类别.e2e-spec.ts

import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { PrismaModule, PrismaService } from 'nestjs-prisma';
import { CategoryModule } from '../src/category/category.module';

describe('CategoryModule (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    // Here you have to mock the category funtions that you'll use
    const mockPrismaService = {
      provide: PrismaService,
      useFactory: () => ({
        category: {
          findMany: jest.fn(() => [])
        },
      }),
    };

    // Here is the creation of the module and the definition for the service
    const mockPrismaModule = {
      module: PrismaModule,
      providers: [mockPrismaService],
      global: true,
    };

    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [CategoryModule, mockPrismaModule], // Here is the import for the mock module
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('(GET) /category', () => {
    return request(app.getHttpServer()).get('/category').expect(200);
  });
});

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