Как протестировать связанный метод, который возвращает обещание?

У меня есть метод, который возвращает разрешенное обещание. Проблема, с которой я сталкиваюсь, заключается в том, как проверить разрешение этого обещания.

По сути, я обновляю свой документ через цепочку других функций, и когда этот документ сохраняется, я хочу показать предупреждение. Прямо сейчас я не могу проверить свое разрешение. На данный момент оповещение никогда не вызывается.

Я хотел бы использовать собственные обещания, а не другие библиотеки, если это возможно. Как бы я протестировал вещи, чтобы я мог убедиться, что мой метод оповещения вызывается.

public update(doc):Promise<any> {
    return collection.doc(doc.id).update(doc).then(res=>{
      console.log('This is never run')
      this.alert.insert({type:"success", message:"Updated"})
    })
    .catch(err=>{
      console.log('Neither is this')

      this.alert.insert({type:"error", message:`Error - Updating ${err}`})

    })
  }

// мой тест

 beforeEach(() => {

    afSpy = jasmine.createSpyObj('AngularFirestore', ['collection', 
    'valueChanges', 'snapshotChanges', 'ref', 'doc','add','update', 
    'then', 'catch', 'finally', 'firestore', 'batch']);
    afSpy.collection.and.returnValue(afSpy);
    afSpy.valueChanges.and.returnValue(afSpy);
    afSpy.snapshotChanges.and.returnValue(afSpy); 
    afSpy.ref.and.returnValue(afSpy); 
    afSpy.doc.and.returnValue(afSpy); 
    afSpy.add.and.returnValue(afSpy); 
    afSpy.update.and.returnValue(afSpy); 
    afSpy.then.and.returnValue(Promise.resolve('hello world')); 
    afSpy.catch.and.returnValue(afSpy); 
    afSpy.finally.and.callThrough()
    afSpy.firestore.and.returnValue(afSpy); 
    afSpy.batch.and.returnValue(afSpy); 

    TestBed.configureTestingModule({
      providers:[
        { provide: AngularFirestore, useValue: afSpy },
      ],      
    })
fit('temporary test', (done) => {

    service.update(mockDoc).then(x=>{
      expect(updateSpy).toHaveBeenCalledWith(mockDoc); //this passes
      console.log(x)
      expect(alertServiceSpy.insert).toHaveBeenCalled() // this fails
      done(); 
    })

});

person Justin Young    schedule 04.01.2019    source источник
comment
Возможный дубликат Как я издеваюсь над сервисом, который возвращает обещание в модульном тесте Angularjs Jasmine?. Я думаю, ты на правильном пути. Посмотрите на сообщение SO, которое я цитировал. Также посмотрите здесь: medium.com/dailyjs /   -  person paulsm4    schedule 05.01.2019