У меня есть служба Angular, которая требует, чтобы объект конфигурации был передан службе:
// my.module.ts
@NgModule({ ... })
export class MyModule {
static forRoot(config: MyServiceConfig): ModuleWithProviders {
return {
ngModule: MyModule,
providers: [{ provide: MyServiceConfig, useValue: config }],
};
}
}
//my.service.ts
export class MyService {
constructor(private _http: HttpClient, @Optional() config: MyServiceConfig) {
if (config) {
if (!config.attr1) {
throw new Error('You must provide the attr1 to use this Module.');
} else if (!config.attr2) {
throw new Error('You must provide the attr2 to use this Module.');
} else {
this.attr1 = config.attr1;
this.attr2 = config.attr2;
}
} else {
throw new Error(
'You must provide a MyServiceConfig object with the attr1 and the attr2 to use this module.',
);
}
}
}
Это все работает, но я хотел бы написать пару тестов вокруг предоставления этого объекта конфигурации дляоказание услуг.У меня было следующее beforeEach
в тестовом файле, и оно выдало ошибку, как и ожидалось, когда объект конфигурации не был предоставлен:
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [FeedbackService],
});
});
Но когда я попытался убрать это из beforeEach
и в индивидуальном тесте я не мог получить ошибку, чтобы бросить правильно.Если бы он был вызван точно так же, как и выше, но в тесте, он бы:
it('should do something', () => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [FeedbackService],
});
});
Я попытался описать выше в блоке try/catch
, пытаясь отловить ошибку, но это дало мне ложный положительный результат.Я пробовал методы expect(() => {}).toThrowError()
и toThrow()
, но даже когда помещал TestBed.configureTestingModule()
внутри этой функции стрелки в ожидаемой, не сработало.При этом не выдается ошибка.
Есть ли способ сделать это?Кроме того, есть ли способ предоставить объект конфигурации службе, чтобы проверить, что он устанавливает атрибуты службы в правильные значения?