预期未定义为已定义 Karma Jasmine 单元测试用例

Expected undefined to be defined Karma Jasmine Unit Test case

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

  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.

我哪里做错了?

我会在 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 测试之前 运行。