处理多个类似的期望
Handling multiple similar expectations
在其中一个应用程序页面上,我们有一个带有一组不同按钮的按钮栏,这些按钮根据屏幕上的不同操作改变它们的"启用状态" 。
因此,相应的UI测试具有非常相似的期望检查,例如:it("action 1", function () {
// some actions
expect(pageObject.batch.applyButton.isEnabled()).toEqual(true);
expect(pageObject.batch.resetButton.isEnabled()).toEqual(true);
expect(pageObject.batch.refreshQueueButton.isEnabled()).toEqual(true);
expect(pageObject.batch.dismissButton.isEnabled()).toEqual(true);
});
it("action 2", function () {
// some actions
expect(pageObject.batch.applyButton.isEnabled()).toEqual(false);
expect(pageObject.batch.resetButton.isEnabled()).toEqual(true);
expect(pageObject.batch.refreshQueueButton.isEnabled()).toEqual(false);
expect(pageObject.batch.dismissButton.isEnabled()).toEqual(true);
});
it("action 3", function () {
// some actions
expect(pageObject.batch.applyButton.isEnabled()).toEqual(false);
expect(pageObject.batch.resetButton.isEnabled()).toEqual(false);
expect(pageObject.batch.refreshQueueButton.isEnabled()).toEqual(true);
expect(pageObject.batch.dismissButton.isEnabled()).toEqual(true);
});
这显然不太好,违反了DRY原则。
你将如何重构它并以一种更可读的方式应用多个期望检查?
我想有一个页面对象函数负责报告按钮的状态,该按钮将返回一个承诺,解析为一个布尔值数组,实际上将在测试中断言:
expect(pageObject.batch.getButtonState()).toEqual([true, true, false, false]);
它"提取方法"并有助于使测试更短,但它使调试更难减少断言错误信息。例如,[true, false, true, false] is not equal to [true, true, false, false]
意义不大,需要单独调查,这可能很耗时。
custom_matcher
通常一个项目想要封装自定义匹配的代码,以便跨多个规范使用。下面是如何创建一个与jasmine兼容的定制匹配器。
// Custom matchers
var matchers = {
toBeEnabled: { ..
// Register matchers
jasmine.addMatchers(matchers)
it(..
expect([ .. ]).toBeEnabled() // pass if ALL enabled
expect([ .. ]).not.toBeEnabled() // pass if ALL disabled
我个人更喜欢user943702的答案,但是如果您想保持布尔值数组的外观,您也可以使用:
expect(pageObject.batch).toHaveStates([true, true, false, false]);
让toHaveStates匹配器遍历两个数组,并按顺序比较批处理中的每个项。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 如何处理10页以上的静态页眉/页脚
- 将事件处理程序绑定到任何可能的事件
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- python到“;流“;字典处理
- 使用javascript进行实时图像处理
- 导入jQuery脚本获胜'我不处理html文件
- Javascript无法处理表单提交
- 在承诺链中处理早期回报的最佳方式
- 处理多个类似的期望