메모리에 몽고가 있는 NestJS 단위 테스트...

NestJS 프로젝트에 몽구스를 이미 설치하고 구성했다고 가정합니다.

테스트할 항목을 확보하기 위해 Squid API를 생성합니다. API는 호출될 때 임의의 squid gif를 제공합니다.
demo repo에서 실제 구현을 볼 수 있습니다.

데이터베이스와 상호 작용하는 코드에 대한 테스트를 작성하는 것은 다소 고통스러운 작업입니다.

테스트 데이터베이스를 만들고 나중에 삭제해야 합니다.
또는
테스트 후 정리하기 위해 수많은 코드를 작성하고 디버깅하게 됩니다...

오늘은 당신의 불행의 끝입니다!
테스트의 수고를 덜어드리기 위해 왔습니다. nestJS, mongoose 및 MongoDB와 함께.... 다른 사용자에게는 죄송합니다.

먼저 새 개발 패키지를 프로젝트에 추가해야 합니다. (이 기사의 끝 부분에 제공된 Github 저장소 링크)

npm i --save-dev mongodb-memory-server 


좋습니다. 이제 메모리에서 mongo 데몬을 생성할 수 있습니다! 얼마나 멋진가요?
나는 게으른 녀석이기 때문에 메모리 내 mongod 부트스트래핑 코드를 다시 작성하고 싶지 않습니다.
미리 구성된 루트 MongooseModule을 쉽게 가져올 수 있는 작은 테스트 유틸리티 파일과 연결을 닫는 도우미를 작성해 보겠습니다.

import { MongooseModule, MongooseModuleOptions } from '@nestjs/mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';

let mongod: MongoMemoryServer;

export const rootMongooseTestModule = (options: MongooseModuleOptions = {}) => MongooseModule.forRootAsync({
  useFactory: async () => {
    mongod = new MongoMemoryServer();
    const mongoUri = await mongod.getUri();
    return {
      uri: mongoUri,
      ...options,
    }
  },
});

export const closeInMongodConnection = async () => {
  if (mongod) await mongod.stop();
}


뛰어난 메모리 내 플러그 플레이 MongoDB 데몬!
서비스 및 컨트롤러 테스트에 그 나쁜 소년을 가져오겠습니다.afterAll 함수에서 연결을 닫는 것을 잊지 마십시오.

import { Test, TestingModule } from '@nestjs/testing';
import { MongooseModule } from '@nestjs/mongoose';

import { SquidService } from './squid.service';
import { closeInMongodConnection, rootMongooseTestModule } from '../test-utils/mongo/MongooseTestModule';
import { SquidSchema } from './model/squid.schema';

describe('SquidService', () => {
  let service: SquidService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      imports: [
        rootMongooseTestModule(),
        MongooseModule.forFeature([{ name: 'Squid', schema: SquidSchema }]),
      ],
      providers: [SquidService],
    }).compile();

    service = module.get<SquidService>(SquidService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });

  /**
    Write meaningful test
  **/

  afterAll(async () => {
    await closeInMongodConnection();
  });
});


짜잔!
당신 준비 다 됐어요.
작성 중인 멋진 코드를 테스트하기 위해 돌아가십시오!

다음 시간에는 NestJS에 대한 종단간 테스트 사례를 다룰 것입니다.



출처



NestjJS
NestJS techniques mongodb
mongod-in-memory
The issue that saved me

좋은 웹페이지 즐겨찾기