Тестирование angular "контроллера как" с жасмином
Я использую синтаксис "контроллер как" в приложении angular. И теперь это время для тестирования, но все примеры предназначены для контроллеров, которым вводится $scope. Как мне вызвать метод this.addItem и проверить, что он добавил элемент в "this.items" в тесте Jasmine?
(function () {
"use strict";
angular.module('myModule', ['factoryModule'])
.controller('MyController', function (myFactory) {
this.items = [];
this.selectedItem = null;
this.addItem = function (itemType) {
var item = myFactory.create(itemType);
this.items.push(trigger);
this.selectedItem = item;
};
this.removeItem = function (item) {
this.items.splice(this.items.indexOf(item), 1);
};
});
})();
Ответы
Ответ 1
Просто, чтобы вытащить комментарий @PSL в ответ, этот код работал у меня:
describe('Controller: ExampleController', function () {
beforeEach(module('app'));
var ExampleController;
beforeEach(inject(function ($controller) {
ExampleController = $controller('ExampleController', {});
}));
it('should define foo', function (){
expect(ExampleController.foo).toBeDefined();
});
});
Ответ 2
Скопируйте следующий код в файл, а затем запустите файл в браузере
<html>
<head>
<!-- Jasmine References -->
<link rel="stylesheet" type="text/css" href="#" onclick="location.href='https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine.min.css'; return false;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine-html.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/boot.min.js"></script>
<!-- Angular and Angular Mock references -->
<script type="text/javascript" src="https://code.angularjs.org/1.4.0-rc.2/angular.min.js"></script>
<script type="text/javascript" src="https://code.angularjs.org/1.4.0-rc.2/angular-mocks.js"></script>
</head>
<body></body>
<script type="text/javascript">
angular.module('calculatorApp', []).controller('CalculatorController', function CalculatorController() {
self = this;
self.sum = function() {
self.z = self.x + self.y;
};
});
describe('calculator: CalculatorControllerAs', function () {
beforeEach(module('calculatorApp'));
var CalculatorControllerAs;
beforeEach(inject(function(_$rootScope_, _$controller_){
var scope = _$rootScope_.$new();
CalculatorControllerAs = _$controller_('CalculatorController', {$scope: scope});
}));
describe('sum', function () {
it('1 + 1 should equal 2', function () {
CalculatorControllerAs.x = 1;
CalculatorControllerAs.y = 2;
CalculatorControllerAs.sum();
expect(CalculatorControllerAs.z).toBe(3);
});
});
});
</script>
</html>