在此示例测试文件中,我看到了两种不同的语法
一个是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!');
}));
});
答案 0 :(得分:1)
DebugElement是本机元素和经过测试的组件的包装,允许测试在所有受支持的平台上运行。
fixture.nativeElement和fixture.debugElement.nativeElement
是相同的东西。这是Angular在DOM中由测试组件模板中指定的HTML元素。通过nativeElement
,您可以在上面的测试中访问和测试屏幕上显示的内容,H1
的文本内容是否为Welcome to the app
。请记住,fixture.debugElement
还有其他方法和属性,例如在By.css()等测试中很有用。
fixture.componentInstance使您可以访问组件类。这使您可以测试组件的公共API。在上面的测试中,您确定应用组件的title属性是否为app
。
您可以检查Angular's testing guide以获得更多详细信息。