【发布时间】:2023-03-20 18:11:01
【问题描述】:
我正在按照Angular官方教程测试一个调用异步服务函数的组件:https://angular.io/guide/testing#component-with-async-service
创建间谍:
const gardenSpy = jasmine.createSpyObj('GardenService', ['getGardens', 'createGarden']);
gardenSpy.getGardens.and.returnValue(of(testGardens));
...
gardenServiceSpy = TestBed.get(GardenService);
将 TestBed 配置为使用我的间谍而不是实际服务:
TestBed.configureTestingModule({
declarations: [ MyGardensComponent ],
providers: [
{ provide: GardenService, useValue: gardenSpy }
],
imports: [FormsModule, HttpClientTestingModule]
})
.compileComponents();
那么,失败的单元测试:
it('should load the gardens', () => {
fixture.detectChanges();
component.getGardens();
expect(gardenServiceSpy.getGardens.calls.any()).toBe(true, 'getGardens called');
});
从这里的覆盖率报告可以看出,subscribe 方法永远不会执行,并且 spy 断言失败。
根据 Angular 教程,这个方法应该可以工作并且允许我同步返回 observable。手动调用 spy 方法可以正常工作并正确返回,因此我认为注入 spy 服务存在问题,而不是创建 spy 本身。任何帮助将不胜感激!
如果你需要查看整个文件,我做了一个 plunkerhere(实际上并没有运行,只是为了查看文件)
【问题讨论】:
标签: angular jasmine karma-jasmine angular-test