Подтвердить что ты не робот

Тестирование 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);
        };
    });
})();
4b9b3361

Ответ 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>