【发布时间】:2020-08-25 11:50:58
【问题描述】:
我有一个关于使用 Jasmin/Karma 进行 Angular 单元测试的问题。
我有以下 3 种服务:EmployeeService、SalaryService 和 TaxationService。
EmployeeService 依赖于 SalaryService,它被注入到它的构造函数中。
SalaryService 依赖于 Taxation 服务,该服务再次注入到它的构造函数中。
在我的employee.component.spec.ts 中,我有以下代码:
let employeeService: EmployeeService;
let salaryServiceSpy: jasmine.SpyObj<SalaryService>;
TestBed.configureTestingModule({
providers: [EmployeeService],
declarations: [ EmployeeComponent ]
})
.compileComponents();
employeeService = TestBed.inject(EmployeeService);
salaryServiceSpy = TestBed.inject(SalaryService) as jasmine.SpyObj<SalaryService>;
}));
it('should return Name and Salary', () => {
expect(employeeService.getEmployeeNameAndSalary(1)).toBe("John Smith receives: $12345 and tax value of 15%");
});
代码工作正常,我的问题是为什么我们需要使用 Jasmine Spy - 代码在没有间谍服务的情况下也能正常工作?
salaryServiceSpy = TestBed.inject(SalaryService) as jasmine.SpyObj<SalaryService>;
我已使用以下内容作为参考:https://angular.io/guide/testing-services。
如果下面的例子更清楚,那么需要创建 ValueServiceSpy 吗? TestBed.inject 是否尚未注入所有依赖项和“其他依赖项的依赖项”?
【问题讨论】:
-
正如稍后在角度指南中解释的那样,间谍用于测试。由于您不使用它,因此您不需要自己定义它。间谍角色是“间谍”服务。如果您在 MasterService 中的某个位置调用了 ValueService 中的函数,则可以使用此 spy 来检查该函数是否被调用。
标签: angular typescript unit-testing dependency-injection karma-jasmine