Fixture.debugElement.componentInstance和Fixture.nativeElement有什么区别?

时间:2019-06-07 03:29:33

标签: angular unit-testing testing angular-cli

在此示例测试文件中,我看到了两种不同的语法

一个是const app = fixture.debugElement.componentInstance;,另一个是const compiled = fixture.nativeElement;我不知道这两种语法有什么区别?

我对角度测试完全陌生,我正在将其应用到我的项目中,但对此我有些困惑。

describe('AppComponent (initial CLI version)', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        AppComponent
      ],
    }).compileComponents();
  }));
  it('should create the app', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
  }));
  it(`should have as title 'app'`, async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app.title).toEqual('app');
  }));
  it('should render title in a h1 tag', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    fixture.detectChanges();
    const compiled = fixture.nativeElement;
    expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
  }));
});

1 个答案:

答案 0 :(得分:1)

DebugElement是本机元素和经过测试的组件的包装,允许测试在所有受支持的平台上运行。

fixture.nativeElementfixture.debugElement.nativeElement是相同的东西。这是Angular在DOM中由测试组件模板中指定的HTML元素。通过nativeElement,您可以在上面的测试中访问和测试屏幕上显示的内容,H1的文本内容是否为Welcome to the app。请记住,fixture.debugElement还有其他方法和属性,例如在By.css()等测试中很有用。

fixture.componentInstance使您可以访问组件类。这使您可以测试组件的公共API。在上面的测试中,您确定应用组件的title属性是否为app

您可以检查Angular's testing guide以获得更多详细信息。