选择语言
durumis AI 总结的文章
- 移除外部依賴關係對於單元測試至關重要。
- 可以使用 jest-mock-extended 套件輕鬆地模擬 Prisma ORM 的 Prisma Client。
- 模擬後,單元測試編寫更加便利。
應用程式單元測試的原則是進行隔離測試,因此最好移除可能會影響測試結果的網路 I/O、資料庫等外部依賴。
這次我在玩具專案中使用了 Prisma ORM,為了進行單元測試,我寫了這篇文章來記錄如何簡單地模擬 Prisma Client。
安裝 jest-mock-extended 套件
Prisma 官方文件也推薦使用此套件,使用上述命令進行安裝。
模擬 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',
});
});
模擬後,也支援類型,因此撰寫單元測試變得非常方便。