Я использую Karma, Jasmine и Sinon для тестирования приложения AngularJs. Контроллер имеет введенную службу, и я хочу использовать песочницу Sinon, чтобы заглушить метод службы. Вот контроллер:Sinon stub on AngularJs сервис не работает как ожидается
(function() {
'use strict';
angular.module('app').controller('myController', myController);
myController.$inject = ['$scope', 'myService'];
function myController($scope, myService) {
$scope.methodTestResult = myService.testMethod();
}
}());
А вот проверочный файл:
(function() {
'use strict';
beforeEach(module('app'));
describe('myController', function() {
var $scope, myService;
beforeEach(inject(function ($controller, $rootScope, _myService_) {
$scope = $rootScope.$new();
myService = _myService_;
$controller('myController', { $scope: $scope });
sandbox = sinon.sandbox.create();
}));
afterEach(function() {
sandbox.restore();
});
describe('methodTestResult', function() {
beforeEach(function() {
sandbox.stub(myService, 'testMethod');
});
it('invokes the testMethod', function() {
expect(myService.testMethod).toHaveBeenCalled();
});
});
});
}());
FWIW, вот служба завода:
(function() {
'use strict';
angular.module('app').factory('myService', myService);
function myService() {
return {
testMethod: function() {
return true;
}
};
}
}());
Когда я запускаю тест он терпит неудачу и говорит :
Ожидаемый шпион «testMethod», светодиод. «testMethod» был вызван 0 раз.
Жутко, если добавить тестовое свойство к услуге внутри тестового файла, например:
myService.testProperty = 'test';
А затем войти на это внутри контроллера испытывается:
console.log(myService.testProperty);
Это работает как ожидалось, и я вижу новое свойство, добавленное в тестовый файл внутри контроллера. У меня есть синус, указанный в качестве каркаса в моей конфигурации кармы, никаких ошибок в отношении недостающих зависимостей не возникает. Вот пакеты Я установил:
"grunt": "^0.4.5"
"grunt-karma": "^0.12.1",
"jasmine-core": "^2.4.1",
"jasmine-sinon": "^0.4.0",
"karma": "^0.13.19",
"karma-jasmine": "^0.3.6",
"karma-phantomjs-launcher": "^0.2.3",
"karma-sinon": "^1.0.4",
"phantomjs": "^1.9.19",
"sinon": "^1.17.2"
Я использовал эту же комбинацию AngularJs/Карма/Жасмин/Sinon до и все работает, как ожидалось. Непонятно, почему заглушка не называется?
Спасибо, я попробую изменить заказ – danwellman
yep, который сделал это, спасибо – danwellman