一个新手Jasmine / Angular问题.
我在控制器中有一个命名函数,如下所示:
.controller( 'DummyCtrl',function DummyCtrl($scope){ var doSomething = function() { return "blah"; }; })
我需要测试这个函数,并尝试通过调用以下Jasmine规范:
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'); }); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。