angular - 使用 Angular 14 Inject() 以及如何在测试中运行它

标签 angular karma-jasmine

对我的代码进行了一些更改,因为我想尝试一些新功能,因此我从使用 constructor() 切换到使用ject() 来导入服务。现在我的测试失败了,我似乎找不到任何关于如何测试它的文档。

如何更改我的测试以使用inject() 方式。

old code

export ResetService {
   constructor(private serviceOne: ServiceOne) 
   {}
}

// updated 

export ResetService {
   #serviceOne = inject(ServiceOne) 
}

// old testing code
describe('ResetService', () => {
  let service: ResetService;
  let serviceOne: jasmine.SpyObj<OrderRepository> = jasmine.createSpyObj(OrderRepository, [
    'clearOrders',
  ]);

  beforeEach(() => {
    service = new ResetService(serviceOne);// giving an error with inject()
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
});

最佳答案

通过在服务中使用 inject,您可以将服务显式耦合到 Angular DI 系统。为了让 Angular DI 在你的测试中工作,你必须使用 Angular 的 TestBed 。使用TestBed,您可以配置模块并提供可以在测试期间注入(inject)的服务:

describe('ResetService', () => {
  let resetService: ResetService;

  beforeEach(() => {
     // Create a spy for your dependency
     let serviceSpy: jasmine.SpyObj<OrderRepository> = 
          jasmine.createSpyObj(OrderRepository, [
          'clearOrders',
      ]);
      // Provide both the service-to-test and its (spy) dependency in the testing module
      TestBed.configureTestingModule({
        providers: [
          ResetService
          { provide: OrderRepository, useValue: serviceSpy}
        ]
      });

      // Get a reference to your service-to-test
      resetService= TestBed.inject(ResetService);
   });


  it('should be created', () => {
    expect(resetService).toBeTruthy();
  });
});


关于angular - 使用 Angular 14 Inject() 以及如何在测试中运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74614903/

相关文章:

asynchronous - Angular 2 - 使用异步 http 请求进行插值和绑定(bind)

Angular:如何将私有(private)方法纳入代码覆盖范围?

angular - 如何使用装饰器使对象的 JSON.stringify 输出 getter ?

angular - 如何以 Angular 创建测试用例以检查本地存储中是否存在值

angular - (单击)和 [ngClass] 不更改表格单元格颜色

javascript - 如何在angular2的e2e Protractor 测试用例中记录消息

javascript - 在规范文件中,如何测试以事件作为参数的组件方法?

javascript - karma 测试 rootScope.$on $locationChangeSuccess

javascript - Angular Karma 测试得到 “TypeError: ' undefined' 不是函数”

javascript - 如何从 karma 测试中模拟dom元素