メモリにMongoを用いたNESTJSのユニットテスト
8835 ワード
あなたのNSTEJSプロジェクトですでにインストールされて、構成されたmongooseを仮定します.
テストをするために、SQUID APIを作成します.APIは、ランダムなイカGIFを提供するときに呼び出されます.
demo repoで実際の実装を見ることができます.
データベースと対話するコードの書き込みテストはかなり痛いです.
テストデータベースを作成し、その後にデータベースを削除する必要があります.
OR
テストの後にきれいにするためにコードのトンを書いて、デバッグするために、あなたは終わります..
今日はあなたの悲惨の終わりです!
私は、あなたにテストのトラブルを保存するために、ここにいます.NestJS、モンゴースとMongoDB .ごめんなさい
まず、プロジェクトに新しい開発パッケージを追加する必要があります.(この記事の最後に提供されたGithubリポジトリへのリンク)
私は怠惰なBRATであるので、私はメモリ内Mongodブートストラッピングコードで書き直したくありません.
小さなテストutilsファイルを書きましょう.
その悪い男の子を我々のサービスとコントローラテストに移しましょう.
あなたは全員集合です.
あなたが書いている素晴らしいコードをテストするために戻ってください!
次回はNESTJSのエンドツーエンドテストのケースを扱います.
NestjJS
NestJS techniques mongodb
mongod-in-memory
The issue that saved me
テストをするために、SQUID APIを作成します.APIは、ランダムなイカGIFを提供するときに呼び出されます.
demo repoで実際の実装を見ることができます.
データベースと対話するコードの書き込みテストはかなり痛いです.
テストデータベースを作成し、その後にデータベースを削除する必要があります.
OR
テストの後にきれいにするためにコードのトンを書いて、デバッグするために、あなたは終わります..
今日はあなたの悲惨の終わりです!
私は、あなたにテストのトラブルを保存するために、ここにいます.NestJS、モンゴースとMongoDB .ごめんなさい
まず、プロジェクトに新しい開発パッケージを追加する必要があります.(この記事の最後に提供されたGithubリポジトリへのリンク)
npm i --save-dev mongodb-memory-server
クール、我々はすぐにメモリにモンゴーデーモンを産むことができます!どのように素晴らしいですか?私は怠惰なBRATであるので、私はメモリ内Mongodブートストラッピングコードで書き直したくありません.
小さなテストutilsファイルを書きましょう.
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();
});
});
とVoila!あなたは全員集合です.
あなたが書いている素晴らしいコードをテストするために戻ってください!
次回はNESTJSのエンドツーエンドテストのケースを扱います.
ソース
NestjJS
NestJS techniques mongodb
mongod-in-memory
The issue that saved me
Reference
この問題について(メモリにMongoを用いたNESTJSのユニットテスト), 我々は、より多くの情報をここで見つけました https://dev.to/webeleon/unit-testing-nestjs-with-mongo-in-memory-54gdテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol