jestjs - 为什么nestjs单元测试在beforeEach而不是beforeAll中创建测试模块?
问题描述
在 nestjs 中,测试文件(来自 cli 的模板)具有Test.createTestingModule
inside beforeEach
,因此它在每次测试之前重新创建模块。
例如 foo.service.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { FooService } from './foo.service';
describe('FooService', () => {
let service: FooService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [FooService],
}).compile();
service = module.get<FooService>(FooService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
});
但为什么它在beforeEach
而不是在beforeAll
?
有什么理由让它在beforeEach
吗?也许它会引起问题?
我看到在 e2e 测试中,应用程序是在 中创建的beforeAll
,所以我不确定为什么单元测试是在beforeEach
.
解决方案
我认为这是因为当你想要执行单元测试时通常需要创建模拟和间谍,这在你想要真正的数据库连接等的 E2E 测试中是不正确的。
如果您在 BeforeAll 中定义模块,则需要创建 AfterEach 以清除每个间谍和模拟的历史记录。
也因为 E2E 中的一切都是真实的,如果我们为每个测试重新初始化所有模块和连接确实需要很长时间。
推荐阅读
- prisma - 为 prisma 数据模型中的数组字段定义是否需要
- mysql - 无法添加或更新子行:外键约束失败 ON DELETE CASCADE ON UPDATE CASCADE
- vba - 检查整数值与浮点值
- python-3.x - 删除行的重复组合值后,重复项未删除
- python - 如何从 pandas df 中选择多个列并将其存储在另一个 df 中?
- ios - 无效令牌 VoIP Apple 推送通知
- android - 如何在 Google Play 上更新应用程序时删除已声明的权限?
- angular - 未捕获的错误:模板解析错误:意外字符“EOF”
- html - css - 用于移动设备的 flex
- python - 无法在 PyCharm 中加载 DLL python 模块。在 Jupyter 和 Spyder 中运行良好