在nestjs中,测试文件(来自cli的模板)在beforeEach
内有Test.createTestingModule
,因此它会在每次测试之前重新创建模块。
例如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
中创建的。
最佳答案
我认为这是因为当您想要执行单元测试时,您通常需要创建模拟和 spy ,这在您想要真正的数据库连接等的 E2E 测试中是不正确的。
如果您在 BeforeAll 中定义模块,那么您需要创建 AfterEach 来清除每个 spy 和模拟的历史记录。
而且由于E2E中的一切都是真实的,如果每次测试都重新初始化所有模块和连接,确实需要很长时间。
关于jestjs - 为什么nestjs单元测试在beforeEach而不是beforeAll中创建测试模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67778895/