这是我在每个块之前进行单元测试。它工作得很好,为每个测试提供了一个新的组件实例。但是,执行beforeEach块大约需要4秒。当你进行了200次测试时,这很慢!
我想将大部分代码移动到beforeAll块(如果您使用Jasmine done()
回调而不是使用异步,则可以使用)但我仍然无法为每个测试创建新实例。有些测试失败,因为之前的测试已经篡改了唯一的实例。
我如何......
或
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [AppModule],
providers: [{provide: APP_BASE_HREF, useValue: '/'},
MockBackend,
BaseRequestOptions,
{
provide: Http,
useFactory: (pBackend: MockBackend, pOptions: BaseRequestOptions) => {
return new Http(pBackend, pOptions);
},
deps: [MockBackend, BaseRequestOptions]
}]
}).compileComponents()
.then(() => {
fix = TestBed.createComponent(Route1DetailComponent);
instance = fix.componentInstance;
injector = fix.debugElement.injector;
});
}));
答案 0 :(得分:0)
我决定在评论中采用@peeskillet和@estus建议的方法。谢谢你们两个。
确定要包含哪些组件/模块成为我在此处解决的下一个问题..
How do you know which components to import when unit testing?
答案 1 :(得分:0)
我写了一个小函数来预编译给定模块的所有内容,以便在每个测试中重复使用。默认情况下,Angular每次都会重新编译所有内容,但这会将它们设置为好像它们是在测试套件开始时使用AoT编译的。它是precompileForTests()
中的s-ng-dev-utils
函数。检查一下-希望对您有帮助!