一个新手Jasmine / Angular问题.
我在控制器中有一个命名函数,如下所示:
.controller( 'DummyCtrl',function DummyCtrl($scope){ var doSomething = function() { return "blah"; }; })
describe ('myApp',function(){ var $scope,$controller; var DummyCtrl; beforeEach(module('myApp')); describe('controllers',function(){ beforeEach(inject(function ($controller,$rootScope){ $scope = $rootScope.$new(); DummyCtrl = $controller('DummyCtrl',{$scope: $scope}); })); describe( 'DummyCtrl',function(){ var blah; beforeEach(function(){ blah = DummyCtrl.doSomething(); }); it('should do something',function(){ expect(blah).toContain("blah"); }); }); }); });
我没有解决问题,而是导致以下错误:TypeError:Object#< DummyCtrl>没有方法’doSomething’.我假设这是一个非常简单的东西,我不理解.
从某种意义上说,使用这样的函数是私有的,不能从函数外部访问.看看这个链接:
http://javascript.crockford.com/private.html
基本上所说的是在javascript中有一个函数/对象,任何东西都有这个. prefix是public,任何带有var前缀的东西都是私有的.
对于Angular,您肯定可以拥有私有变量和函数,如果不仅仅是为了减少$scope变量的内存使用量.私有函数应该由$scope对象调用,以获取用户显示/使用的值.尝试将其更改为:
.controller( 'DummyCtrl',function DummyCtrl($scope){ var doSomething = function() { return "blah"; }; $scope.something=doSomething(); })
describe( 'DummyCtrl',function(){ var scope = {},ctrl = new DummyCtrl(scope); it('should do something',function(){ expect(scope.something).toMatch('blah'); }); });