茉莉花:检查我的方法是否调用服务时发生错误(不是函数)

时间:2018-06-29 14:25:20

标签: angular unit-testing jasmine karma-jasmine

在我的组件类中,我的方法getUsers()使用名为getData()的服务。在单元测试中,我想测试我的方法是否成功调用了getData()。因此,我这样做是编写了一个简单的测试,但是我认为我缺少一些东西。在测试中,我注入了服务,并创建了该服务的假同步。从那里,我扩展了我的服务和方法getData。然后,我执行我的方法getUsers()。最后,我希望getData被调用。运行测试时,出现以下错误:$thumb = VideoThumbnail::createThumbnail(public_path('stories/videos/21530251287.mp4'), public_path("images/"), 'thumb.jpg', 2, 600, 600); 。我认为我没有正确使用spyOn。这是隔离测试:

TypeError: this.httpService.getData(...).catch is not a function

我当时在想这可能与我如何设置规范类有关?这是我的设置方式

 it('should have getUsers() call the service GetData()', inject([HttpService], fakeAsync((httpService) => {

 let url = AppConfig.URL_UsersList //AppConfig is importerd
 spyOn(httpService, 'getData').and.returnValue(url);

    dashboardComponent.getUsers();

    expect(httpService.getData()).toHaveBeenCalled();

  })))

这是我要测试的功能:

describe('Dashboard Component', () => {
  let httpService: HttpService;
  let dashboardComponent: DashboardComponent
  let fixture: ComponentFixture<DashboardComponent>
  //let element;

  beforeEach(async() => {
    TestBed.configureTestingModule({
      declarations: [
        DashboardComponent
      ],
       providers: [
           HttpService
      ],
    }).compileComponents();
  });

beforeEach(() => {
    fixture = TestBed.createComponent(DashboardComponent);
    dashboardComponent = fixture.componentInstance;
  });

我的目标是让我的测试成功检查使用我的getUsers方法时是否正在调用getData。谢谢!

编辑:所以我收到此错误的原因是因为我的组件返回了一个可观察的对象,所以我刚刚返回了一个字符串。这是更新的行。我怀疑它工作正常,因为现在我收到一个完全不相关的错误消息,指出未定义属性API。

 getUsers() {
        this.httpService.getData(AppConfig.URL_UsersList)
            .catch((error: Response | any) => {
                this.showAlertWindow(this.exceptionMessage);
                console.error(error.message || error);
                return Observable.throw(error.message || error);
            })
            .subscribe((res: any) => {
                this.rowData = res;
                this.redrawAgGrid();
            });
    }

1 个答案:

答案 0 :(得分:1)

阅读消息。它说:

  

this.httpService.getData(...)。catch不是函数

因此,它调用getData(),然后对.catch()返回的值调用getData(),但由于getData()不返回包含{ {1}}方法。

所以

  1. 您要测试的代码不是您发布的代码,因为您发布的代码会调用catch(),并且该消息抱怨this.httpService.getData(...).subscribe()
  2. 实际的代码期望getData()中具有catch()方法的内容,因此可能是一个承诺。但是ou使它返回this.httpService.getData(...).catch,我想那不是一个应许。