测试 – 如何用AngularJs中的私有方法编写可测试的控制器?
好的,所以我一直在绊倒一些问题很长时间,我想听听社会其他人的意见。
首先,让我们来看一些抽象控制器。 function Ctrl($scope,anyService) { $scope.field = "field"; $scope.whenClicked = function() { util(); }; function util() { anyService.doSmth(); } } 显然我们在这里: >控制器的常规支架与$范围和一些服务注入 现在,我想在单元测试(Jasmine)中覆盖这个类。然而,问题是,我想验证当我点击(调用whenClicked())一些项目,util()方法将被调用。我不知道该怎么做,因为在Jasmine测试中,我总是得到的错误,或者mock为util()没有被定义或没有被调用。 注意:我不是试图修复这个特殊的例子,我问一般测试这样的代码模式。所以请不要告诉我“什么是确切的错误”。我问如何做到这一点,而不是如何解决这个问题。 我一直在尝试一些方法围绕这个: >显然我不能在我的单元测试中使用$ scope,因为我没有这个功能附加到这个对象(它通常以消息预期间谍结束,但未定义或类似) 好吧,我找不到我的方式,我会期待一些帮助从JS忍者,一个工作的小提琴将是完美的。
命名空间的范围是污染。你想要做的是将该逻辑提取到一个单独的函数,然后注入到你的控制器。即:
function Ctrl($scope,util) { $scope.field = "field"; $scope.whenClicked = function() { util(); }; } angular.module("foo",[]) .service("anyService",function(...){...}) .factory("util",function(anyService) { return function() { anyService.doSmth(); }; }); 现在你可以单元测试嘲笑你的Ctrl以及“util”。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |