【问题标题】:Expected undefined to be defined Karma Jasmine Unit Test case预期未定义的定义 Karma Jasmine 单元测试用例
【发布时间】:2020-09-05 22:49:49
【问题描述】:

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

  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.

我在这里做错了什么?

【问题讨论】:

  • 但我正在对服务进行模拟响应

标签: angular typescript jasmine karma-jasmine


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 2015-06-29
    • 2016-06-24
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2019-12-09
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多