如何使用量角器测试控制器作为语法?

Posted

技术标签:

【中文标题】如何使用量角器测试控制器作为语法?【英文标题】:How do I test controller as syntax with protractor? 【发布时间】:2017-08-11 15:08:13 【问题描述】:

我目前正在为一个应用编写一些量角器测试。但是在应用程序中,我使用控制器作为语法,因为我想要处理的部分是组件。问题是当我使用 ""$ctrl.functionName"" 的选择器时,它给了我一个非法的选择器语句。

有人对此有任何想法吗?

let btn = $$("button[ng-click^=$ctrl.initRequest].secondary.bf-btn");
        expect(btn.isDisplayed()).toBe(true);

错误信息是

Failed: invalid selector: An invalid or illegal selector was specified

【问题讨论】:

请分享代码。 你为什么不给你的按钮分配一个语义ID或类,而不是依赖低级的实现细节来选择它?测试不必关心控制器与控制器。它应该找到由“init-request”标识的按钮(例如),并测试它是否显示。 我认为从现在开始我们必须这样做,应用程序上的许多功能都没有得到严格的 ID。必须邮寄工作人员开始将 id 放在按钮和元素上。 @JBNizet 是对的。除了它不起作用之外,如果您将测试与内部组件结合起来,它们将不断中断。维护噩梦...... 【参考方案1】:

如果您无法为元素分配有意义的id 或其他属性,则需要修复当前选择器。至少,ng-click 值周围应该有引号:

button[ng-click^='$ctrl.initRequest'].secondary.bf-btn

请注意,也不需要引号的稍微好一点的版本是使用部分匹配:

button[ng-click*=initRequest].secondary.bf-btn

然后,看看你是否可以放弃有问题的课程,然后:

button[ng-click*=initRequest]

【讨论】:

这很完美!非常感谢!团队的其他成员现在正在接受 ID 无处不在的指示!

以上是关于如何使用量角器测试控制器作为语法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用“ng e2e”对节点服务器而不是 webpack-dev-server 运行量角器测试

如何使用量角器在 monaco 编辑器中插入代码?

如何在angularjs e2e量角器测试中上传文件

如何在非 angularjs 网站上使用量角器?

使用量角器测试 AngularJS 应用程序时禁用动画

如何使量角器与木偶和chrome 78一起使用?