Angular 测试:重写以使用模板而不是 templateUrl

Angular test: override to use template instead of templateUrl

我有一个包含 iframe 的组件。为了防止在测试中从 iframe 加载不存在的 URL 我想模拟组件的模板。我以为我可以使用 TestBed.overrideComponent() 来做到这一点,但它没有效果。测试运行时,我可以看到原始模板存在,而 iframe 加载不存在的 url.

我尝试了什么:

fixture = TestBed.overrideComponent(IFrameComponent, {
  remove: {
    templateUrl: './iframe.component.html'
  },
  add: {
    template: '<div></div>'
  }
}).createComponent(IFrameComponent);

如何覆盖组件以使用 template 而不是 templateUrl

它对我不起作用的原因是我调用了 TestBed.overrideComponent() after compileComponents().

正确顺序是这样的:

TestBed.configureTestingModule({
   declarations: [IFrameComponent]
}).overrideComponent(IFrameComponent, {
   remove: {
      templateUrl: './iframe.component.html'
   },
   add: {
      template: '<div data-test-iframe="iframe"></div>'
   }
}).compileComponents();
fixture = TestBed.createComponent(IFrameComponent);