使用Jasmine测试访问控制器的范围

时间:2016-01-11 22:14:37

标签: javascript angularjs jasmine karma-runner

我试图使用Jasmine调用Angular Controller方法。我写了以下控制器

angular.module('oide.filebrowser')
.controller('FilebrowserController', ['FBFiletreeService', '$rootScope', 'FileService', '$scope', 'FilesystemService', '$modal', function(FiletreeService, $rootScope, FileService, $scope, FilesystemService, $modal){
  var self = this;
  self.formDirPath = function(){
    // Do something...
    return "/home/saurabh";
  };
 })]);

现在,我正在尝试使用Jasmine在范围上运行formDirPath方法,并使用Karma运行测试。我写了以下测试

describe('Filebrowser', function() {
  var scope;
  var controller;
  beforeEach(module('oide.filebrowser'));
  describe('FilebrowserController Test', function() {
    beforeEach(inject(function($controller, $rootScope, $httpBackend, $http){
      scope = $rootScope.$new();
      controller = $controller(
        'FilebrowserController as ctrl', {
          $scope: scope
      });
    }));

    it('should form a correct current dir path', function(){
      expect(scope.formDirPath()).toBe('/home/saurabh');
    });
  });
});

我得到一个错误的方法说

  

'undefined'不是函数(评估'scope.formDirPath()')

我在这里做错了吗?我尝试引用以下链接,这对我不起作用: How to use scope variables with the "Controller as" syntax in Jasmine?

Call a controller function from Karma and Jasmine testing

2 个答案:

答案 0 :(得分:1)

理解了这个问题。它是controllerAs语法。 改变

expect(scope.formDirPath()).toBe('/home/saurabh');

expect(scope.ctrl.formDirPath()).toBe('/home/saurabh');

修复了问题

答案 1 :(得分:0)

formDirPath是控制器的功能。

尝试:expect(controller.formDirPath()).toBe('/home/saurabh');