javascript – 在AngularJs控制器中测试$scope,依赖于$filter
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在AngularJs控制器中测试$scope,依赖于$filter,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2266字,纯文字阅读大概需要4分钟。
内容图文
我已经完成了一些教程和基本的例子,但是我很难为我的控制器编写单元测试.我已经看到代码片段实例化控制器并让角度注入$rootScope对象,而后者又用于为控制器创建新的范围对象.但我无法弄清楚为什么ctrl.$scope?未定义:
describe('EmployeeCtrl', function () {
var scope, ctrl, $httpBackend;
beforeEach(inject(function (_$httpBackend_, $rootScope, $controller, $filter) {
$httpBackend = _$httpBackend_;
scope = $rootScope.$new();
ctrl = $controller('EmployeeCtrl', { $scope: scope});
expect(ctrl).not.toBeUndefined();
expect(scope).not.toBeUndefined(); //<-- PASS!
expect(ctrl.$scope).not.toBeUndefined(); //<-- FAIL!
}));
});
我最终使用范围变量而不是ctrl.$scope但是在我的第一次测试时我无法弄清楚如何在我的控制器中单元测试函数变量:
控制器:
function EmployeeCtrl($scope, $http, $filter, Employee) {
var searchMatch = function (haystack, needle) {
return false;
}
}
破损的单元测试:
it('should search ', function () {
expect(ctrl.searchMatch('numbers','one')).toBe(false);
});
这就是我得到的
TypeError: Object # has no method ‘searchMatch’
你如何测试这个功能?作为一种解决方法,我将我的方法移动到$scope,所以我可以测试scope.searchMatch,但我想知道这是否是唯一的方法.
最后,在我的测试中看来$filter也是未定义的,你如何注入它?我尝试了这个但是没有用:
ctrl = $controller('EmployeeCtrl', { $scope: scope, $filter: $filter });
谢谢
更新:
注入$filter的上述方法效果很好.
解决方法:
我的理解是,在Angularjs中,当应用程序启动并且控制器修改范围时,您将范围对象传递给控制器??.控制器不再被调用.
在Angularjs中,控制器真正做的是初始化范围:控制器只运行一次.
如果您理解这一点,您会意识到向控制器询问范围如下:
currentScope = myController.scope;
没有意义.
(顺便提一下,我在Angular中不喜欢的一个是他们选择的名称.如果’控制器’正在做的是初始化范围,那么它实际上并不是一个控制器.在Angular中有很多这样的东西. API).
我认为测试’控制器’的’正确’方法是在Jasmine beforeEach子句中从头开始创建一个新的空白范围,并使用’controller’初始化一个新的空白范围,如下所示::
var ctrl, myScope;
beforeEach(inject(function($controller, $rootScope) {
myScope = $rootScope.$new();
ctrl = $controller('myController', {
$scope: myScope
});
}));
然后测试新创建的范围具有预期的属性:
it('In the scope, the initial value for a=2', function() {
expect(myScope.a).toBe(2);
});
换句话说,你不测试控制器;您测试控制器已创建的范围.
所以,你做得对.
内容总结
以上是互联网集市为您收集整理的javascript – 在AngularJs控制器中测试$scope,依赖于$filter全部内容,希望文章能够帮你解决javascript – 在AngularJs控制器中测试$scope,依赖于$filter所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。