Я пытаюсь построить макет службы, чтобы мои модульные тесты могли проверять, что определенные функции вызываются и соответственно обновляются. К сожалению, я не могу заставить это работать.Отказывание тестового модуля HTTP с помощью AngularJS и Jasmine
Im в настоящее время получаю ошибку undefined is not a function
на этой линии:
spyOn(statusService, 'getModuleStatus').andCallThrough();
Моя текущая служба выглядит следующим образом:
serviceStatusServices.factory('serviceStatusAppAPIservice', function ($http) {
var serviceStatusAppAPI = {};
serviceStatusAppAPI.getModuleStatus = function() {
return $http({
method: 'JSON',
url: '/settings/getservicestatusandconfiguration'
});
}
serviceStatusAppAPI.setModuleStatus = function (module) {
return $http({
method: 'POST',
url: '/settings/setservicestatusandconfiguration',
data: { moduleId: module.ModuleId, configData: module.ConfigValues }
});
}
return serviceStatusAppAPI;
});
Моя функция обновления
serviceStatusControllers.controller('serviceStatusController', ['$scope', 'serviceStatusAppAPIservice', '$filter', '$timeout', function ($scope, serviceStatusAppAPIservice, $filter, $timeout) {
$scope.update = function() {
$scope.loading = true;
serviceStatusAppAPIservice.getModuleStatus().then(function (response) {
$scope.modules = $filter('orderBy')(response.data.moduleData, 'ModuleName')
...
Мои тесты выглядеть следующим образом
describe('ServiceStatusController', function() {
beforeEach(module("serviceStatusApp"));
var scope;
var statusService;
var controller;
var q;
var deferred;
// define the mock people service
beforeEach(function() {
statusService = {
getModuleStatus: function() {
deferred = q.defer();
return deferred.promise;
}
};
});
// inject the required services and instantiate the controller
beforeEach(inject(function ($rootScope, $controller, $q) {
scope = $rootScope.$new();
q = $q;
controller = $controller('serviceStatusController', {
$scope: scope, serviceStatusAppAPIservice: statusService });
}));
describe("$scope.update", function() {
it("Updates screen", function() {
spyOn(statusService, 'getModuleStatus').andCallThrough();
scope.update();
deferred.resolve();
expect(statusService.getModuleStatus).toHaveBeenCalled();
expect(scope.modules).not.toBe([]);
});
});
});
Также, как передать любые данные, полученные от службы, вызывающей стороне. В настоящее время в моей модели я делаю serviceStatusAppAPI.getModuleStatus(data)
, затем использую data.Data
, чтобы выйти из возвращенного JSON.
Привет, Спасибо и да, вы в основном правы. Я обновил свой вопрос с помощью моей функции обновления. В настоящее время я получаю сообщение об ошибке 'getModuleStatus' – Chris
Попробуйте указать точные данные, которые вы ожидаете в своем макетном сервисе. Я думаю, так как вы применяете $ filter и ожидаете чего-то из этого. Вам нужно предоставить точные данные, чтобы фильтр $ filter мог фильтровать результаты –
может быть что-то вроде этого {moduleData: [{moduleName: 'Module1'}, {moduleName: 'newmodule'}]} –