在Angular中,全局注入器(Global Injector)通常是通过Injector
类来创建和管理的。在Karma Jasmine测试中,如果你想要实例化父组件中的全局注入器,并在测试中使用它,你可以按照以下步骤进行:
首先,在你的应用中创建一个全局注入器。这通常在应用的根模块或根组件中完成。
// app.module.ts 或者 app.component.ts
import { Injector } from '@angular/core';
export let globalInjector: Injector;
@NgModule({
// ...
})
export class AppModule {
constructor(private injector: Injector) {
globalInjector = this.injector;
}
}
在你的Karma Jasmine测试文件中,你可以导入这个全局注入器,并使用它来获取服务实例。
import { TestBed } from '@angular/core/testing';
import { MyService } from './my.service';
import { globalInjector } from './app.module'; // 或者 app.component.ts
describe('MyService', () => {
let myService: MyService;
beforeEach(() => {
// 使用全局注入器获取服务实例
myService = globalInjector.get(MyService);
});
it('should be created', () => {
expect(myService).toBeTruthy();
});
// ... 其他测试
});
globalInjector
在应用的根模块或根组件中被正确设置。假设你有一个简单的服务MyService
,它依赖于另一个服务AnotherService
。
// my.service.ts
import { Injectable } from '@angular/core';
import { AnotherService } from './another.service';
@Injectable({
providedIn: 'root'
})
export class MyService {
constructor(private anotherService: AnotherService) {}
doSomething() {
return this.anotherService.doAnotherThing();
}
}
在测试中,你可以这样使用全局注入器:
import { TestBed } from '@angular/core/testing';
import { MyService } from './my.service';
import { AnotherService } from './another.service';
import { globalInjector } from './app.module';
describe('MyService', () => {
let myService: MyService;
beforeEach(() => {
// 使用全局注入器获取服务实例
myService = globalInjector.get(MyService);
spyOn(globalInjector.get(AnotherService), 'doAnotherThing').and.returnValue('mocked result');
});
it('should call doAnotherThing on AnotherService', () => {
const result = myService.doSomething();
expect(result).toBe('mocked result');
});
});
这样,你就可以在Karma Jasmine测试中使用父组件中的全局注入器了。
领取专属 10元无门槛券
手把手带您无忧上云