首页 > 解决方案 > Angular Unit Test,如何使用服务调用测试组件功能

问题描述

我正在尝试测试以下代码:

getEmployeeDetails() {
    const employeeURL = 'apiURL';
    this.employeeService.getEmployees(employeeURL).subscribe((result) => {
      result.forEach((item, index) => {
        const addressURL = '/address/' + item.employeeId;
        this.employeeService.getAddress(addressURL).subscribe((result2) => {
            result2.forEach((item2, index2) => {
            
            });
        });
      });
    });
}

但出现以下错误:

未捕获的 TypeError:result.forEach 不是抛出的函数

尝试使用以下单元测试用例进行测试时

 describe('employee test', () => {
  const employees = [
    { id: 1, name: 'Raju'},
    { id: 2, name: 'Arun'}
  ];  
        const mockEmployeeService = jasmine.createSpyObj('EmployeeService', ['getEmployees']);
      
        const getDataSpy = mockEmployeeService.getEmployees.and.returnValue( of(employees) );  
      
      
      beforeEach(async(() => {        
          TestBed.configureTestingModule({
              declarations: [...],
              imports: [...],
              schemas: [...],
              providers: [
                { provide: EmployeeService, useValue: mockEmployeeService }
              ],
          });
     });        
    
    it('should call api and return value', () => {
        fixture.detectChanges();
    
        component.getEmployeeDetails();
      });
    );

请就如何测试上述代码提供建议。

标签: angularunit-testingjasminekarma-jasmineangular-test

解决方案


推荐阅读