pouchdb测试发出了与模拟remoteDB的同步状态

问题描述 投票:2回答:1

该测试是使用Jasmine的Angular 2应用程序。

我具有开始与remote DB同步的功能(仅从Couchbase到PouchDB的一种方式)。有些服务基本上订阅了复制事件上发出的可观察对象。现在,我被要求测试发出的同步状态是否正确,并且由于服务文件的测试覆盖率低而阻止了部署。

所以我用本地startSync数据库和远程pouchdb对象调用couchdb。我如何才能测试每个事件侦听器发出正确的结果?我试图遍历replicate.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);
      });
  }
}
angular jasmine pouchdb
1个回答
0
投票

我认为您可以执行以下操作,例如将remoteDB更改为无效以触发“已暂停”,并抛出“已暂停”或“更改”以触发“错误”。即:

    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);
      });
  }
}

活动可能是最容易触发的,方法是从另一个localdb复制并在复制等待更改时将其添加到它,如果允许,在remoteDB中更新文档也可以。

© www.soinside.com 2019 - 2024. All rights reserved.