我试图使用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?
答案 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');