gpt4 book ai didi

angular - 使用 jasmine angular2 注入(inject)私有(private)服务的单元测试

转载 作者:太空狗 更新时间:2023-10-29 17:11:32 26 4
gpt4 key购买 nike

我在尝试对 Angular 服务进行单元测试时遇到问题。我想验证此服务是否正确调用注入(inject)其中的另一个服务。

假设我有这个注入(inject) ServiceInjected 的 ServiceToTest:

服务测试.service.ts

@Injectable()
export class ServiceToTest {
constructor(private _si: ServiceInjected) {}
public init() {
this._si.configure();
}

}

ServiceInjected.service.ts

@Injectable()
export class ServiceInjected {
constructor() {}
public configure() {
/*Some actions*/
}

}

有了这些服务,现在我编写我的单元测试:

const serviceInjectedStub = {
configure(): void {}
}


describe('ServiceToTest service Test', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [ServiceToTest ,
{ provide: ServiceInjected, useValue: serviceInjectedStub }]
});
});

it('should be initialize the service injected', inject([ServiceToTest],
(tService: ServiceToTest) => {
spyOn(serviceInjectedStub, 'configure');
tService.init();
expect(serviceInjectedStub.configure).toHaveBeenCalled();
}));

我原以为我的测试是阳性的,但是我收到以下错误:

预期的 spy 配置已被调用。

另一方面,如果我以这种方式将注入(inject)的服务设置为 public,它就可以正常工作:

private _si: ServiceInjected by public si: ServiceInjected

最佳答案

您不会监视与您的 TestBed 相关的服务。从您的测试台获取服务

beforeEach(() => {
TestBed.configureTestingModule({
providers: [ServiceToTest ,
{ provide: ServiceInjected, useValue: serviceInjectedStub }]
});
injectedService = TestBed.get(ServiceInjected);
});

并对其进行测试

spyOn(injectedService, 'configure').and.returnValue(/* return same data type here */);
// ...
expect(injectedService.configure).toHaveBeenCalled();

关于angular - 使用 jasmine angular2 注入(inject)私有(private)服务的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com