Как высмеивать новые обещанные блоки в жасмине

У меня есть следующий метод в моем сервисе

initialStateData() {
    if (!this.hasLoaded()) { 
        console.log('do you see me?? 1');
        // next line erroring out here on..
        console.log('do you see me?? 2');
        this._dataLoadPromise = new Promise((resolve, _reject) => {
                this.actionManager.initLoad();
                const promises = [];
                promises.push(this.getFacs());
                promises.push(this.getRoles());
                promises.push(this.getParams());
                promises.push(this.getSecurityRights());

                Promise.all(promises).then(() => {
                    this.actionManager.completeInitialLoad(this.initialState, this.initialStaticData);

                    this.fac$.subscribe((fac) => this.loadFacBasedData(fac, false));
                    this.fg$.subscribe((fg) => this.loadFacBasedData(fg, true));
                    this.rightSets$.subscribe((rightSets) => this.getUsersForSecRights(rightSets));
                    this._hasLoaded = true;
                    resolve();
                })
                .catch((err) => {
                    this.actionManager.dispatchAction('ERROR_OCCURRED', 'in initialStateData()');
                    this.HandleError(err);
                });
            });
    }
}

Мой тестовый пример, как показано ниже:

describe('initialStateData', () => {
    it('makes expected calls', () => {
      const actionManagerStub: ActionManager = TestBed.get(ActionManager);
      service.initialStaticData = { rights: [{ GroupKey: 33, GroupName: 'Manager', Description: null, GroupIsShown: true }], roles: [{ roleId: 'a0986679', roleName: 'admin' } ] } ;
      spyOn(service, 'getSecurityRights').and.callThrough();
      spyOn(actionManagerStub, 'initLoad');
      spyOn(actionManagerStub, 'completeInitialLoad').and.callThrough();
      spyOn(actionManagerStub, 'dispatchAction').and.callThrough();
      (<jasmine.Spy>service.initialStateData).and.callThrough();
      service.initialStateData();
      expect(service.getRightSetsForRoles).toHaveBeenCalled();
      expect(service.getLastCoders).toHaveBeenCalled();
      expect(service.getDischarges).toHaveBeenCalled();
      expect(service.getGrouperDescription).toHaveBeenCalled();
      expect(service.getUsersForRightSets).toHaveBeenCalled();
      expect(actionManagerStub.initLoad).toHaveBeenCalled();
      expect(actionManagerStub.completeInitialLoad).toHaveBeenCalled();
      expect(actionManagerStub.dispatchAction).toHaveBeenCalled();
    });
  });

я вижу это do you see me?? 1 в консоли, но do you see me?? 2 Я также вижу следующие ошибки в консоли

context.js:232 Необработанный отказ от обещания: отправка не удалась: вы забыли настроить свой магазин?

как получить выполнение jasmine в новый блок Promise((resolve_reject)) из контрольного примера?

любая помощь приветствуется..

1 ответ

Это может быть решено с помощью done Параметр в вашем тестовом примере и вызовите его, как только вы решите, что обещание выполнено. например:

it('makes expected calls', (done) => {
...settingup spys etc
service.initialStateData();
...assertions
servie._dataLoadPromise.then(() => {
...moreassertions
done();
});
};
Другие вопросы по тегам