Я пытаюсь создать модульный тест для проверки углового компонента, который использует ключевые слова async/await
для вызова $q
. Я хочу смоделировать возвращаемое значение $q
и сделать так, чтобы мой компонент обработал эти проверенные данные. К сожалению, похоже, что эти данные не проверяются должным образом, и части компонента, на котором я проверяю значения, возвращают нуль, потому что они никогда не генерируются.
Я уже провел некоторые исследования по модульному тестированию асинхронных функций в jasmine / angular:
http://www.bradoncode.com/blog/2015/07/13/unit-test-promises-angualrjs-q/
Угловые 1,5 && Асинхронные / Await && Жасминовые тесты
Но не имели никакого успеха. Добавление метода $scope.$apply()
создает новые проблемы, связанные с тем, что нужно смоделировать многие другие вызовы $httpbackend
, которые выполняет моя платформа. Издевательство над обещанием быть возвращенным из $ q также не помогло.
Функция, которую я пытаюсь проверить:
this.resolver(async () => {
const preliminaryResults = await this.$q.all(dataPromises);
const results = await this.checkDataAmount(preliminaryResults, restangularQueryable, startDate, endDate);
// Do some processing on the data
Мой юнит-тест выглядит так:
it('should support calendar preview', () => {
component.alert.whenCondition = 'CALENDAR';
const response = [{
timestamps: [1, 2, 360000000],
timestampsWithValues: [],
values: [1, 2, 3]
}, {
values: {
avg: 1
}
}];
const promise = new Promise((resolve, reject) => {
resolve(response);
});
spyOn(component, 'checkDataAmount').and.returnValue(promise);
spyOn($q, 'all').and.returnValue(promise);
component.getAlertPreviewConfig();
expect(component.chartConfig.yAxis.plotLines[0].value).toBe(5);
expect(component.chartConfig.yAxis.max).toBe(5.5);
expect(component.chartConfig.series[0].data).toEqual([{x: 1, y: 5}, {x: 2, y: 5}, {x: 172800001, y: 5}, {x: 172800002, y: 5}, {x: 360000000, y: 5}]);
expect(component.chartConfig.series[1].data).toEqual([{x: 1, y: 0}, {x: 2, y: 0}, {x: 2, y: 2}, {x: 1, y: 2},
{x: null, y: null}, {x: 1, y: 5}, {x: 2, y: 5}, {x: 2, y: 1005}, {x: 1, y: 1005}, {x: null, y: null}]);
expect(component.chartConfig.series[2].data).toEqual([{x: 172800001, y: 0}, {x: 172800002, y: 0}, {x: 172800002, y: 2}, {x: 172800001, y: 2},
{x: null, y: null}, {x: 172800001, y: 5}, {x: 172800002, y: 5}, {x: 172800002, y: 1005}, {x: 172800001, y: 1005}, {x: null, y: null}]);
});
Я ожидаю, что свойства component
не будут нулевыми после выполнения теста. В частности, я бы ожидал, что chartConfig
не будет нулевым. Я проследил тест, и кажется, что тест останавливается после вызова await
в моем коде. Что я здесь не так делаю?