тестирование pouchdb передало состояние синхронизации с mocking remoteDB - PullRequest
2 голосов
/ 22 февраля 2020

Тест представляет собой приложение Angular 2 с Jasmine.

У меня есть эта функция, которая начинает синхронизацию с remote DB (только в одну сторону от Couchbase до PouchDB только). Существуют службы, которые в основном подписываются на наблюдаемую информацию, которая генерируется в событии репликации. Теперь меня просят проверить, правильно ли отправлено состояние синхронизации, и развертывание заблокировано из-за низкого покрытия тестовым файлом службы.

Поэтому я вызываю startSync с локальной базой данных pouchdb и удаленной couchdb объект. Как я могу проверить, что каждый слушатель события генерирует правильный результат? Я пытался go с помощью кода дубликата. js, но я и понятия не имею об этом. Любой намек, пожалуйста?

По сути, я хочу проверить, что излученное состояние является "ложным", когда я высмеиваю / генерирую событие "ошибка".

@Injectable()
export class SyncingService {
  private subscription: any;
  public syncingState: any = new BehaviorSubject<boolean>(false);

  private emitResult(state: boolean) {
    this.syncingState.next(state);
  }

  public startSync(localPouch: any, remoteDB: any, config: any) {
    let vm: any = this;

    this.subscription = localPouch.replicate
      .from(remoteDB, { live: true, retry: true })
      .on("paused", err => {
        vm.emitResult(false);
      })
      .on("active", info => {
        vm.emitResult(false);
      })
      .on("change", change => {
        vm.emitResult(true);

      })
      .on("error", error => {
        vm.emitResult(false);
      });
  }
}

1 Ответ

0 голосов
/ 27 февраля 2020

Я думаю, что вы можете сделать что-то вроде изменения remoteDB на недопустимый для запуска «paused» и добавления «paused» или «change» для запуска «error». Т.е.:

    this.subscription = localPouch.replicate
      .from("127.0.0.1", { live: true, retry: true })
      // bad server most likely gets paused with these flags
      .on("paused", err => {
        throw(new Error("oops")); // cause an unrecoverable error instead?
        vm.emitResult(false);
      })
      .on("active", info => {
        vm.emitResult(false);
      })
      .on("change", change => {
        vm.emitResult(true);

      })
      .on("error", error => {
        vm.emitResult(false);
      });
  }
}

active может быть проще всего запустить путем репликации из другой локальной базы данных и добавления к ней, пока репликация ожидает изменений, обновление do c в remoteDB также будет работать, если это разрешено .

...