茉莉花/因果报应错误,因为无法读取未定义的属性

时间:2018-08-28 19:01:46

标签: angular unit-testing jasmine karma-jasmine

我正在尝试创建涵盖所有行(茉莉花/ Karma),但是由于无法读取未定义的属性'搜索'

,我遇到了错误

这是我的组件代码。

public search() {
  if (this.searchCompany.length) {
    let term = this.searchCompany;
    this.tempList = this.tempNameList.filter(tag => {
      if (tag.companyName.toLowerCase().indexOf(term.toLowerCase()) > -1) {
        return tag;
      }
    });
  } else {
    this.resetCompanies();
  }
}

以下是我尝试过的规范的以下代码

it('should search the data', () => {
  component.search;
  expect(component.search()).toBeUndefined();
});

请就上述错误为我提供帮助,

1 个答案:

答案 0 :(得分:2)

由于您的搜索方法具有if语句-我们可以编写至少两个单元测试。

这是针对没有搜索标签的情况-如果我们有空的resetCompanies,我们将调用searchCompany

  it('should resetCompanies if search is empty', () => {
    component.searchCompany = '';
    spyOn(component, 'resetCompanies').and.callFake(() => null);

    component.search();

    expect(component.resetCompanies).toHaveBeenCalled();
  });

这是一个例子,当我们有搜索标签和搜索作品时,我们希望tempList数组最终将由一项{ companyName: 'test' }组成,因为我们的搜索标签test与过滤器逻辑中的条件:

  it('should search company', () => {
    component.searchCompany = 'test';
    component.tempList = [];
    component.tempNameList = [
      { companyName: 'abc' },
      { companyName: 'test' },
      { companyName: 'def' },
    ];

    component.search();

    expect(component.tempList).toEqual([{ companyName: 'test' }]);
  });