Настройка ngrx/data для интеграционного тестирования
Я пытаюсь настроить интеграционный тест, который будет получать некоторые данные из серверной службы API с использованием сущностей ngrx/data.
У меня есть этот StackBlitz: https://stackblitz.com/edit/ngrxdata-testing-not-working-pxfmkb?file=src/main.ts
Он должен запускать тесты при запуске - в моих тестовых примерах нет никаких ожиданий, однако я просматриваю журналы консоли и ожидаю, что он покажет журнал ClientDataService
(/src/app/data/client/client-data.service.ts
), то есть:
console.log('never goes here :(');
В интеграционном тесте (data.integration.spec.ts) я настраиваю модуль, определяя тип объекта Client и включая AppDataServiceModule
что, в свою очередь, делает это:
import { NgModule } from '@angular/core';
import { ClientDataService } from './client/client-data.service';
import { EntityDataService, EntityDefinitionService } from '@ngrx/data';
@NgModule({
providers: [
ClientDataService,
],
})
export class AppDataServiceModule {
constructor(
entityDataService: EntityDataService,
clientDataService: ClientDataService
) {
entityDataService.registerService('Client', clientDataService);
}
}
Как видите, я регистрирую службу данных, как это предлагается в документации ngrx, здесь
Я чувствую себя довольно близко, но мне просто нужно толкнуть в правильном направлении, чтобы все заработало!
1 ответ
Пользовательский DataService должен расширять DefaultDataService
. Должно выглядеть примерно так:
export class ClientDataService extends DefaultDataService<Client> {
constructor(
http: HttpClient, httpUrlGenerator: HttpUrlGenerator
) {
super('Client', http, httpUrlGenerator);
}
public getAll(): Observable<any> {
// get Data here
}
}
В BackendService
должен вернуть Observable:
public getClients(): Observable<Array<Client>> {
// will be mocked
return of([
{
id: '1: Will not return as it will be mocked'
},
{
id: '2: Will not return as it will be mocked'
}
])
}
Есть еще две вещи, которые мне кажутся подозрительными:
- В коде нет подписки, поэтому я предполагаю, что ваш
Observable
холодно. - В
clientResolve.resolve({}, {})
звонок ожидаетActivatedRouteSnapshot
как первый параметр. Я не так хорошо знаком сResolve
интерфейс, но, возможно, это тоже проблема.