Как выполнить модульный тест для http-запроса внутри функции в директиве

0

Я сделал функцию внутри HTTP-запроса для получения, а затем отправил запрос, как я могу проверить этот метод, вот моя функция контроллера:

var getConfig = function () {
    if (!$scope.json) {
        $http.get('/schools/' + $scope.school.id + '/config?deployment_uuid=' + $scope.schoolId)
                .then(function (response) {
                    $scope.school.config = JSON.stringify(response.data, null, 4);
                });
    }
};

$scope.disable = function () {
    getConfig();
    $http.post('/school/' + $scope.school.id + '/update', {
        deployment_id: $scope.schoolId,
        component: $scope.schoolName,
        is_enabled: false,
        config: JSON.parse($scope.school.config)
    });
};

прецедент:

  describe('controller', function () {
        fit('should POST payload  for a scenario to disable', function () {
            $scope.school.config = JSON.stringify(mockSchoolConfig, null, 4);
            $scope.disable();
            $scope.$digest();
            $httpBackend.expect('POST', '/school/' + $scope.school.id + '/update', {
                deployment_id: $scope.schoolId,
                component: $scope.schoolName,
                is_enabled: false,
                config: $scope.school.config
            }).respond(200);
            //$httpBackend.flush();
        });
    });

Error: Unexpected request: GET /s/create-alarm/config?school_uuid=170bf60e-0153-4615-9a4e-a6bc3ad546ea

Больше ожиданий не ожидается

Как проверить эту функцию и HTTP-запрос?

Теги:
unit-testing
directive

1 ответ

1

В вашем коде вы смешиваете настройки, запрос и код обработки. Хотя удобно писать такой код, трудно проверить (как вы заметили). Решение состоит в том, чтобы разбить код на части, возможно, каждый в отдельной функции:

var requestConfig() {
    return $http.get('/schools/' + $scope.school.id + '/config?deployment_uuid=' + $scope.schoolId);
}

var saveConfig(response) {
    $scope.school.config = JSON.stringify(response.data, null, 4);
}

var getConfig = function () {
    if (!$scope.json) {
        requestConfig()
                .then(function (response) {
                    saveConfig();
                });
    }
};

В ваших тестах вы можете теперь издеваться над функциями. Например, вы можете заменить requestConfig() функцией, которая просто возвращает объект без запроса.

Вы также можете избежать использования глобальных переменных, таких как $scope и вместо этого передавать информацию через аргументы функции, чтобы упростить запись тестов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню