如何使用Jasmine测试AngularJS控制器中是否存在属性?

时间:2013-09-14 10:22:58

标签: angularjs bdd jasmine

我有一个看起来像这样的controllers.js文件:

angular.module('MyApp.controllers', []).

controller('MyCtrl', [function() {

  $scope.type = "default";

}]);

和,controllersSpec.js如下所示:

describe('controllers', function(){

  beforeEach(module('MyApp.controllers'));

  describe('MyCtrl', function() {

    it('should have a property named "type" whose default value is "default"', inject(function() {

      expect(MyCtrl.type).toBe("default");

    }));

  });

});

如何测试MyCtrl控制器是否具有type属性且该属性的默认值是"default"字符串?

此外,这种类型的测试是否值得,或者我应该重写它?如果我要改写它,那怎么样?

1 个答案:

答案 0 :(得分:1)

因为您正在测试$scope而不是Controller函数的属性,所以您需要使用模拟的$scope来模拟整个Ctrl的创建。

var scope, controller;

beforeEach(inject(function ($controller, $rootScope) {
  scope = $rootScope.$new();
  controller = $controller('MyCtrl', {$scope: scope});
}));

it('should have a default type when created', function() { 
  expect(scope.type).toBe("Default")
});