У меня есть функция, которую я пытаюсь проверить, которая включает в себя блок подписки.Вот упрощенная версия, чтобы проиллюстрировать то, о чем я говорю:
let obs = rx.Observable.forkJoin(
api.get('example'),
api.get('example2')
);
obs.subscribe(res => {
vm.result = res[0];
vm.testResult = 123;
});
В своей спецификации я высмеиваю свой API и слежу за вызовами get и возвращаю такие значения:
it('should set values', () => {
spyOn(api, 'get').and.returnValue(Promise.resolve(['test']);
let ctrl = createController();
ctrl.result = 1;
ctrl.testResult = 456;
ctrl.executeFunction();
expect(ctrl.testResult).toEqual(123);
expect(ctrl.result).toEqual('test');
});
Опять же, это упрощено, у меня есть много спецификаций в этом контроллере, которые работают.Главное, что я хочу упомянуть, это то, что когда я добавляю этот тест, покрытие включает в себя интересующие меня строки, которые я написал выше, так что я знаю, что макет работает и его ударили, однако операторы ожидают неудачу, и они такие, какими они были раньше.функция выполняется.
Я думаю, что проблема заключается в том, что оператор ожидания не ожидает завершения блока подписки.Я пробовал несколько решений, таких как $scope.$apply()
и другие подобные функции.
У кого-нибудь есть идеи?