预期未定义,必须定义Karma Jasmine单元测试用例

时间:2020-09-04 19:28:23

标签: angular typescript jasmine karma-jasmine

我正在尝试为以下功能编写一个简单的单元测试用例,

  getMembers() {
    this.service.getMembers()
    .subscribe(response => {
      this.allMembers = response;
    })  
  }

下面是我写的规范,

 it("should call getMembers subscribe method", fakeAsync(() => {
    let membersSpy = spyOn(apiService, 'getMembers' ).and.returnValue(of(mockData));
    let subSpy = spyOn(apiService.getMembers(),'subscribe');  
    homeComponent.getMembers();
    fixture.detectChanges();
    expect(membersSpy).toHaveBeenCalledBefore(subSpy);
    expect(subSpy).toHaveBeenCalled();
  }));

  it("should call getMembers and return list of members", fakeAsync(() => {
    expect(homeComponent.allMembers).toBeDefined();
    expect(homeComponent.allMembers.length).toBeGreaterThan(1);
  }));

此规格should call getMembers and return list of members出现以下错误

Expected undefined to be defined.

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我将在beforeEach中进行设置,并稍微更改第一个测试。

 beforeEach(() => {
   let membersSpy = spyOn(apiService, 'getMembers' ).and.returnValue(of(mockData));
   homeComponent.getMembers();
   fixture.detectChanges();
 });

 it("should set allMembers to response of getMembers", fakeAsync(() => {
    expect(homeComponent.allMembers).toEqual(mockdata);
  }));

  it("should call getMembers and return list of members", fakeAsync(() => {
    expect(homeComponent.allMembers).toBeDefined();
    expect(homeComponent.allMembers.length).toBeGreaterThan(1);
  }));

第二项测试遇到的问题是您没有明确调用getMembers()。现在,所有这些设置都在beforeEach中,并且beforeEach将在每次it测试之前运行。