对我的代码进行了一些更改,因为我想尝试一些新功能,因此我从使用 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/