我有一个Angular应用程序(Ionic / Cordova),我有一个" Utils"使用各种简单的misc静态方法的类。
由于这个类是静态的,我使用initialize()
方法传递一些依赖项(也许这不是最佳实践,但在这种情况下,有这个"静态类"使有些事情在应用程序中更容易。
无论如何,我希望测试一些静态方法,其中一些可能依赖于通过initialize()
方法设置的这些静态依赖项。
所以Utils.initialize看起来像这样..
export class Utils {
private static platform : Platform;
private static appVersion : AppVersion;
private static device : Device;
private static translate : TranslateService;
public static initialize(appVersion : AppVersion, device : Device, platform : Platform, translate : TranslateService){
Utils.appVersion = appVersion;
Utils.device = device;
Utils.platform = platform;
Utils.translate = translate;
}
并调用其中一个使用translate
public static compareNoCase(s1 : string, s2 : string) : number {
....
return s1.localeCompare(s2, Utils.translate.currentLang, {'sensitivity': 'base'});
}
在这种情况下,我传入一个Translate服务,其中一些字符串比较调用使用此翻译服务器中的属性language
,如上所述>我嘲笑TranslateService`如下......
export class TranslateServiceMock {
public currentLang: string = "en";
}
我可以使用以下内容让这个工作......
describe('Test Compare String IgnoreCase', () => {
beforeEach(async () => {
language
TestBed.configureTestingModule({
declarations: [],
providers: [
{ provide: TranslateService, useClass: TranslateServiceMock },
],
}).compileComponents();
});
it('Expected AAAA < bbbb', inject([TranslateService], trans => {
Utils.initialise(new AppVersion(), new Device(), new Platform(), trans);
let r = Utils.compareNoCase("AAAA", "bbbb");
expect(r).toEqual(-1);
}));
但是,使用上述内容,我需要将行Utils.initialise(new AppVersion(), new Device(), new Platform(), trans);
传递到每个it
块中。
我希望能做到这一点&#34;静态初始化&#34;在beforeEach()
中,所以我尝试了以下内容,我在then()
的调用返回的承诺的compileComponents()
中进行了初始化....
describe('Test Compare String IgnoreCase', () => {
beforeEach(async () => {
TestBed.configureTestingModule({
declarations: [],
providers: [
{ provide: TranslateService, useClass: TranslateServiceMock },
],
}).compileComponents()
.then(_ => {
inject([TranslateService], trans => {
Utils.initialise(new AppVersion(), new Device(), new Platform(), trans)
});
});
});
it('Expected AAAA < bbbb', inject([TranslateService], trans => {
let r = Utils.compareNoCase("AAAA", "bbbb");
expect(r).toEqual(-1);
}));
但是当我使用上面的静态属性时,测试中的方法正在访问,即通过initialize()
传递的translate服务的静态引用为null。
有没有办法做到这一点&#34;静态初始化&#34;,或者我只需要像每个代码片段一样将它包含在每个测试中吗?
提前感谢您的帮助!