言語を選択
durumis AIが要約した文章
- 単体テストのために、外部依存関係を排除することが重要です。
- Prisma ORM の Prisma Client を jest-mock-extended パッケージを使用して簡単にモッキングできます。
- モッキング後、単体テストの作成が容易になりました。
アプリケーション単位のテストは、隔離された状態で実行することが原則であるため、テスト結果に影響を与える可能性のあるネットワーク I/O や データベースなどの外部依存性を排除するのが良いでしょう。
今回は、トイプロジェクトに Prisma ORM を使うことになったので、単体テストのために Prisma Client を簡単にモックする方法を探して記録しようと思い、 作成しました。
jest-mock-extended パッケージのインストール
Prisma の公式ドキュメントでも推奨されているパッケージを上記の command でインストールします。
Prisma Client のモック化
describe('UserService', () => {
let service: UserService;
let prismaMock: DeepMockProxy;
beforeEach(async () => {
prismaMock = mockDeep();
const module: TestingModule = await Test.createTestingModule({
providers: [
UserService,
{
provide: PrismaService,
useValue: prismaMock,
},
],
}).compile();
service = module.get(UserService);
単体テストのコード例
describe('create', () => {
it('ユーザーの作成に成功するとユーザー情報を返す必要がある', async () => {
// Arrange
const newUser = {
email: 'test@test.com',
password: 'test1234',
};
prismaMock.user.create.mockResolvedValue({
id: 1,
email: 'test@test.com',
password: 'test1234',
});
// Act
const result = await service.create(newUser);
// Assert
expect(result).toEqual({
id: 1,
email: 'test@test.com',
password: 'test1234',
});
});
モック化後は型もサポートされるため、単体テストの作成が非常に便利になりました。