angular - 如何监视嵌套方法, Jasmine

标签 angular typescript firebase jasmine google-cloud-firestore

我需要测试一个函数,我需要帮助的唯一测试用例是检查 dataCollection.add() 方法是否已被调用。我认为这里需要一名 spy ,但任何建议都将不胜感激。

这是我需要测试的函数,其中包含dataCollection.add()方法:

...
constructor(private _firebase: AngularFirestore, private _read: ReadService) {}

createRootCollectionDocument$(collection: string, data: any): Observable<firebase.firestore.DocumentReference> {
   const testt = this._firebase.collection(collection);
   const dataCollection: AngularFirestoreCollection<any> = this._firebase.collection(collection);
    return Observable.from(
       dataCollection.add({ ...data }).catch((err: firebase.firestore.FirestoreError) => {
          throw err.message;
        })
     );
 }

这是我的测试用例:

...
beforeEach(() => {
   service = TestBed.get(CrudService);
}

it('uses the firebase collection.add method', () => {
      return service.createRootCollectionDocument$(collectionStub, dataStub).toPromise().then((result) => {
         ...
      })
 });           
...

提前致谢!

最佳答案

您可以 stub this._firebase.collection 以返回模拟对象,然后查看其 add 函数被调用。

it('uses the firebase collection.add method', () => {

      let mockAdder = jasmine.createSpyObj("adder", ["add"]);
      jasmine.spyOn(service["_firebase"], "collection").andReturn(mockAdder);

      return service.createRootCollectionDocument$(collectionStub, dataStub).toPromise().then((result) => {

          expect(mockAdder.add).toHaveBeenCalled();

      });
});      

关于angular - 如何监视嵌套方法, Jasmine ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49106696/

相关文章:

html - 悬停时更改 Angular Material 扩展标题的颜色

javascript - 如何修复由以下原因引起的 : Error in app/app. component.html:15:1:没有 RouterOutletMap 提供程序

typescript - 应用函数名称和参数的函数类型

javascript - display.html typescript 不工作

带有 angular2-highcharts 的 JSON 数据

angular - ionic ionic 选择、 ionic 选择选项

javascript - 如何将 mongoDB 连接到 angular2 应用程序?

firebase - 找不到插件项目:firebase_core_web

javascript - 从嵌套对象中删除父键

java - 任务在android studio中不成功