У меня есть ресурс завод
angular.module('mean.clusters').factory('Clusters', ['$resource',
function($resource) {
return $resource('clusters/:clusterId/:action', {
clusterId: '@_id'
}, {
update: {method: 'PUT'},
status: {method: 'GET', params: {action:'status'}}
});
}]);
и контроллер
angular.module('mean.clusters').controller('ClustersController', ['$scope',
'$location', 'Clusters',
function ($scope, $location, Clusters) {
$scope.create = function() {
var cluster = new Clusters();
cluster.$save(function (response) {
$location.path('clusters/' + response._id);
});
};
$scope.update = function() {
var cluster = $scope.cluster;
cluster.$update(function() {
$location.path('clusters/' + cluster._id);
});
};
$scope.find = function() {
Clusters.query(function (clusters) {
$scope.clusters = clusters;
});
};
}]);
Я пишу мои модульные тесты и каждый пример, который я найти используем некоторую форму $httpBackend.expect
, чтобы высмеять ответ с сервера, и я могу сделать это просто отлично.
Мои проблемы в том, что когда модуль тестирует мои функции контроллера, я хотел бы высмеять объект Clusters. Если я использую $httpBackend.expect
, и я ввожу ошибку на моем заводе, каждый модульный тест в моем контроллере не удастся.
Я хотел бы получить мой тест $scope.create
только тест $scope.create
, а не мой заводской код.
Я попытался добавить провайдера в часть моих тестов, но я не могу понять, как это правильно.
Я также попытался
clusterSpy = function (properties){
for(var k in properties)
this[k]=properties[k];
};
clusterSpy.$save = jasmine.createSpy().and.callFake(function (cb) {
cb({_id: '1'});
});
и установка Clusters = clusterSpy;
в before(inject
но в функции создания, шпион потеряется с
Error: Expected a spy, but got Function.
Я был в состоянии получить объект шпиона работать на вызов cluster.$update
, но затем он не работает с var cluster = new Clusters();
с ошибкой «не является функцией».
Я могу создать функцию, которая работает для var cluster = new Clusters();
, но затем не подходит для вызовов типа cluster.$update
.
Я, вероятно, смешиваю здесь термины, но есть ли подходящий способ издеваться над кластерами со шпионами над функциями или есть веская причина просто пойти с $httpBackend.expect
?
Чтобы увидеть разницу между объектами функций и литералов объектов искать книгу «JavaScript: хороший части» от Дугласа Crockford, страницы 20-30. PDF-версию книги можно легко найти, выполнив поиск Google. – claudius