在没有 TestBed 的单元测试中使用 Angular 14 注入()

问题描述 投票:0回答:1

以下代码

当我运行单元测试时,我收到错误 - 必须从注入上下文(例如构造函数、工厂函数、字段初始值设定项或与

EnvironmentInjector#runInContext
一起使用的函数)调用inject()。

如果您使用 TestBed,可以针对此错误提供大量帮助,但我们不使用。

我使用的是 Angular 14.2.4,它是一个字段初始值设定项,所以我不明白它?

TypeScript 文件

export class MyComponent implements OnInit, OnDestroy {

  ...

  private _componentRegistryService = inject(ComponentRegistryService);

规格文件

fdescribe('DynamicComponent', () => {
  let component: MyComponent;
  let router: Router;

  const _componentRegistryService = jasmine.createSpyObj('ComponentRegistryService', ['getComponentsByRoute']);
  const _dynamicLoaderService = jasmine.createSpyObj('DynamicLoaderService', ['getUserComponentChoices']);

  beforeEach(() => {
    component = new MyComponent(router);
  });

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

});

angular karma-jasmine
1个回答
0
投票

你必须使用TestBed。这样做相当简单,并且不会增加任何明显的开销。

component = TestBed.runInInjectionContext(() => new MyComponent(router));

这应该就是您需要做的全部。

© www.soinside.com 2019 - 2024. All rights reserved.