У меня есть контроллер, который в настоящее время вызывает API RESTful при загрузке связанного представления. Таким образом, я не уверен, связана ли эта проблема с тем, как я тестирую, или с реализацией самого кода. Я был бы доволен любыми предложениями, которые бы решали проблему целостно, то есть помогать мне, тестовый код, который делает то, что я хочу :)AngularJS: Как отключить функцию внутри контроллера, который я тестирую с помощью модуля?
Вот несколько примеров, чтобы проиллюстрировать мою точку зрения:
контроллер:
angular.module('app.myModule',[])
.controller('MyController', function($scope) {
$scope.notTestingThis = function() {
var thisFails = $scope.do.not.want.to.mock.these.objects.substr(0,10);
};
$scope.testingThis = function(myString) {
$scope.newString = myString;
};
$scope.notTestingThis();
});
испытания (как он стоит):
describe('MyControllerTest', function() {
beforeEach(module('app.myModule'));
var $controller;
beforeEach(inject(function(_$controller_) {
$controller = _$controller_;
}));
describe('$scope.testingThis()', function() {
it('sets newString', function() {
$scope = {
'notTestingThis': {}
};
var myController = $controller('MyController', {$scope: $scope});
});
});
});
При загрузке этого представления мне нужно вызвать notTestingThis, так или иначе, однако в моем модульном тесте я хочу выделить testingThis. Проблема в том, что когда я инициализирую контроллер в своем тесте, он, конечно, вызовет notTestingThis и попытается выполнить действия над объектами, которые не существуют (и которые мне не нужны в этом тесте).
Очевидно, что попытка вырезания функции, о которой идет речь в этом примере, бесполезна, так как при инициализации будет переписана область $. Есть ли способ заглушить или издеваться над отдельными функциями в контроллере, который вы пытаетесь проверить, или я пропустил точку где-то? Некоторые предположения, что коллега выдвигаемые были:
Enhance контроллер, чтобы быть в курсе самого модульного тестирования, что позволяет регулировать ход выполнения программы на основе введенного издеваться, то есть что-то вроде следующего в контроллере:
if (!$scope.methodA) {
$scope.methodA = function() {...}
}
... или ...
изменить способ notTestingThis функция вызывается, слушая к событию инициализации от $ rootScope вместо вызова непосредственно, которая позволила бы мне дразнить $ rootScope так, что он не вызывает это событие, тем самым предотвращая notTestingThis от призыва
Я могу» Мне кажется, что я думаю об этом неправильно. Какие-нибудь идеи?