Настройка ngrx / data для интеграционного тестирования - PullRequest
2 голосов
/ 04 апреля 2020

Я пытаюсь настроить интеграционный тест, который будет извлекать некоторые данные из службы 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.spe c .ts) я настраиваю модуль, определяя тип сущности клиента и включая 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 docs, здесь

Я чувствую, что Я довольно близок, но мне нужно лишь подтолкнуть его в правильном направлении, чтобы все заработало!

1 Ответ

1 голос
/ 05 апреля 2020

Пользовательский 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 должен возвращать наблюдаемое:

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'
    }
  ])
}

Есть еще две вещи, которые мне кажутся подозрительными:

  1. В коде нет подписки, поэтому я предполагаю, что ваш Observable холодный.
  2. При вызове clientResolve.resolve({}, {}) ожидается ActivatedRouteSnapshot в качестве первого параметра. Я не очень знаком с интерфейсом Resolve, но, возможно, это тоже проблема.
...