【发布时间】:2020-10-16 15:37:59
【问题描述】:
我已将浏览器的控制台对象配置为 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 测试之前运行?
我该怎么做?我应该把它放在哪里?
【问题讨论】:
-
在每个测试文件中导入
ConsoleTestModule是否适用于你? -
是的,我认为这可行 - 请参阅 @AliF50 的解决方案。如果可能的话,我仍然更喜欢全局
beforeEach(),所以我不必每次都导入它。