Есть ли способ шпионить за конструктором Promise? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть эта функция

public pick(config?: FilePickerConfig): Promise<FilePickerResult> {
    return new Promise<FilePickerResult>(resolve => {
      this.pickWithCallbacks(resolve, resolve, config);
    });
  }

Я хочу проверить, имеет ли вызов this.pickWithCallbacks в качестве первого и второго параметра параметр resolve функции.

Есть лиспособ сделать это в шутку или жасмин? Я пытался шпионить за window, 'Promise', но он не работает.

Редактировать: Это не исключение Шпионаж на конструкторе с использованием Jasmine , потому что это то, что я пытался и сделалне работает.

Я пробовал это:

      const dummyResolve = () => { };
      const promiseSpy = spyOn(window, 'Promise').and.callFake((dummyResolve)=>{});
      const pickWithCallbacksSpy = spyOn(sut, 'pickWithCallbacks');
      sut.pick();

      expect(pickWithCallbacksSpy).toHaveBeenCalledWith(dummyResolve, dummyResolve, undefined);

1 Ответ

1 голос
/ 02 октября 2019

Итак, в конце концов я просто оставил Обещание сделать свое дело и перехватил обратный вызов разрешения

    test('on success should call pickWithCallbacks with the resolve function of a promise', (done) => {
      const cordovaExecSpy = spyOn(sut, 'pickWithCallbacks');
      const dummyReturn = {};
      sut.pick().then(obtained => {
        expect(obtained).toBe(dummyReturn);
        done();
      });

      const capturedOnSucess = cordovaExecSpy.calls.mostRecent().args[0];
      capturedOnSucess(dummyReturn);
    });

    test('on Error should call pickWithCallbacks with the resolve function of a promise', (done) => {
      const cordovaExecSpy = spyOn(sut, 'pickWithCallbacks');
      const dummyReturn = {};
      sut.pick().then(obtained => {
        expect(obtained).toBe(dummyReturn);
        done();
      });

      const capturedOnError = cordovaExecSpy.calls.mostRecent().args[1];
      capturedOnError(dummyReturn);
    });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...