Angular测试用例的未定义​​属性错误

时间:2019-01-17 09:39:42

标签: angular karma-jasmine

测试用例失败,并显示一条错误,指出未定义的属性。

我正在将roleID传递给getResults()。当我运行ng test(“它应该创建组件”).truthy时,它会抛出错误-> undefined roleID。

我也曾在HTML中使用过类似* ngIf =“ x?.roleID”的HTML,在该错误中我遇到了同样的错误。

*.spec.ts文件的示例:

// it('should create', () => {
//     expect(component).toBeTruthy();
//   });
// While running the ng Test for this Component, it is throwing error like ngOnit() Id of undefined property

2 个答案:

答案 0 :(得分:1)

如果在组件中未定义this.inputArray,则尝试访问ngOnInit属性时roleID方法将失败。在测试过程中,您必须确保正确初始化输入,即inputArray属性,可以通过

完成

a)将测试包装在适当设置输入的测试驱动程序组件中,例如通过使用类似这样的模板:

<your-component [inputArray]="validArray"></your-component>

b)在准备测试时初始化组件属性:

beforeEach(() => {
  fixture = TestBed.createComponent(YourComponent);
  component = fixture.componentInstance;
  // assign valid array to property here:
  component.inputArray = [{roleID: 1, ...}];
  // ... your ngOnInit will be run now:
  fixture.detectChanges();
});

答案 1 :(得分:0)

您的问题所在:您没有测试台,也没有正确的导入文件可以运行ng test

选中此tutorial以获取基本知识即可解决您的问题。

还有official doc in testing

您将看到以下内容:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { BannerComponent } from './banner.component';

describe('BannerComponent', () => {
  let component: BannerComponent;
  let fixture: ComponentFixture<BannerComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ BannerComponent ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(BannerComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeDefined();
  });
});