如何在全球范围内模拟Jasmine的Angular服务



我已经将浏览器的控制台对象配置为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.configureTestingModuleimports阵列中

beforeEach(() => {
TestBed.configureTestingModule({
imports: [TestModuleForAll],
providers: []
});
});

最新更新