Я сделал функцию внутри 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-запрос?
В вашем коде вы смешиваете настройки, запрос и код обработки. Хотя удобно писать такой код, трудно проверить (как вы заметили). Решение состоит в том, чтобы разбить код на части, возможно, каждый в отдельной функции:
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
и вместо этого передавать информацию через аргументы функции, чтобы упростить запись тестов.