我已经将浏览器的控制台对象配置为Angular服务,这样我就可以将其注入其他服务中,比如:
export const CONSOLE = new InjectionToken<Console>('Console', {
providedIn: 'root',
factory: () => console
});
不过,在Jasmine测试中,我想注入该服务的模拟版本,这样我的Jasmine检测代码就不会开始将间谍附加到实际的console
对象上(因为我不确定它们是否会在测试结束时自动分离,因为服务(即底层console
对象(从未被破坏(。
我可以在描述块的开头执行此操作,即:
beforeEach(() => {
const console = {
error: () => {
}
};
TestBed.configureTestingModule({
providers: [
{provide: CONSOLE, useValue: console}
]
});
});
但是,我不想在每个测试文件中都这样做。
有没有办法在标准Angular CLI项目中定义一个全局beforeEach()
,它将在我的所有Jasmine测试之前运行?我该怎么做?我该把它放在哪里
尽管这是一个轻微的改进,但您可以将mock提供程序偏移到一个模块中。
所有的测试模块
import { NgModule } from '@angular/core';
const console = {
error: () => {
}
};
@NgModule({
imports: [ ],
providers: [ {provide: CONSOLE, useValue: console} ],
})
export class TestModuleForAll{ }
然后将此模块放入TestBed.configureTestingModule
的imports
阵列中
beforeEach(() => {
TestBed.configureTestingModule({
imports: [TestModuleForAll],
providers: []
});
});