Angular 混合应用程序测试“无法读取 null 的属性‘nativeElement’”

Posted

技术标签:

【中文标题】Angular 混合应用程序测试“无法读取 null 的属性‘nativeElement’”【英文标题】:Angular Hybrid App Test "Cannot read property 'nativeElement' of null" 【发布时间】:2019-10-14 08:08:44 【问题描述】:

我有一个简单的测试:

it ('should be able to navigate to add program', fakeAsync(() => 
  let href = fixture.debugElement.query(By.css('.add-program-btn'));
  let link = href.nativeElement.getAttribute('href');
  expect(link).toEqual('/program/new');
));

并不断收到错误:

TypeError: Cannot read property 'nativeElement' of null

我尝试将tick()20000 一起使用,并添加fixture.detectChanges(),但没有任何效果。另一项检查是否单击按钮和调用的函数的测试具有相同的错误。是不是找不到元素?

这个测试使用的所有东西都在 Angular 中,所以我不认为这是因为它是一个混合应用程序。

提前致谢。

【问题讨论】:

试试console.log(fixture.debugElement.nativeElement.innerhtml)看看HTML是什么样子的。 好的,谢谢。似乎问题的根源是我在父容器中的ngIf。那么现在我该怎么办,将 ngIf 设置为 true 以便正确的 HTML 在 DOM 中? 但是,现在我得到了TypeError: Cannot read property 'length' of undefined 【参考方案1】:

当在模板中使用*ngIf 并且它的表达式计算为假值时会发生这种情况。您应该为组件设置适当的输入,以便*ngIf 可以评估为真;

这里是一些示例代码:

it ('should be able to navigate to add program', async(() => 
  const component = fixture.componentInstance;

  // Set particular input so that ngIf makes your href visible to true
  component.inputName = true;

  // run change detection, updated input value should get used
  fixture.detectChanges();

  // in some cases you may want for things to stabilize
  await fixture.whenStable();

  // For debugging prupose, you may want to log innerHTML
  console.log(fixture.debugElement.nativeElement.innerHTML)

  // Rest of the test
  let href = fixture.debugElement.query(By.css('.add-program-btn'));
  let link = href.nativeElement.getAttribute('href');

  expect(link).toEqual('/program/new');
));

【讨论】:

以上是关于Angular 混合应用程序测试“无法读取 null 的属性‘nativeElement’”的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 混合内容:“https 错误”处的页面

Angular 混合应用程序 - Angular 2 路由器不工作

构建混合 angular/angularjs 应用程序 - 如何在 angularjs 应用程序中加载 Angular 模块

Angular 8 混合应用程序无法识别 AngularJS 组件

使用 Ionic + TypeScript + Angular 的混合应用程序

混合 Angular 1.x + Angular 6 应用程序,在 Angular 1.x 中包含 vanilla JS 和 TS 文件