我已经开始使用CodeceptJs,并且我已经很容易地开展工作。我目前正在与NightmareJs一起使用它,一切似乎都很好。在定制帮手中处理断言
我正在测试的特定区域是一个画廊,通过JSONP从界面提取数据,创建包含在<div>
中的图像列表。
我执行的测试的部分是这样的:
Feature('gallery')
Scenario('clicking on an element adds "selected" class', (I) => {
I.amOnPage('/')
I.seeElement('#gallery .col-md-3')
I.click('#gallery .col-md-3')
I.seeElement('#gallery .selected')
})
现在,因为该元素可以是任何数字,它目前默默地使用的第一要素,但为了给它一点更熵我想随机挑选一个元素,像下面
Scenario('clicking on an element adds "selected" class', (I) => {
I.amOnPage('/')
I.seeMoreThanElements('#gallery .col-md-3', 1)
I.clickOnRandomElement('#gallery .col-md-3')
I.seeElement('#gallery .selected')
})
甚至更好,如果我能抢到元素的列表,以便我可以决定点击其中一个,如:
名Scenario('clicking on an element adds "selected" class', (I) => {
I.amOnPage('/')
I.seeMoreThanElements('#gallery .col-md-3', 1)
const elements = I.grabRandomElement('#gallery .col-md-3')
const random = getRandomInt(1, elements.length)
I.click(`#gallery .col-md-3:nth-child(${random})`)
I.seeElement(`#gallery .col-md-3.selected:nth-child(${random})`)
})
当前的助手之前,不要让我执行一些特定的动作,所以我就开始实现自定义处理程序,在http://codecept.io/helpers/
的指南中所描述在我的配置我有以下几点:
"helpers": {
"Nightmare": {
"url": "http://localhost:3000"
},
"DOMElements": {
"require": "./__tests__/helpers/domelements_helper.js"
}
}
和domelements_helper.js
目前看起来如下:
'use strict'
let assert = require('assert')
class DOMElements extends Helper {
seeMoreThanElements (locator, count) {
this.helpers['Nightmare']._locate(locator).then(function (els) {
return assert(els.length >= count, `Found more than ${count} elements`)
})
}
}
module.exports = DOMElements
这并未很明显 - 工作。这是我有点困惑。
首先,我使用了默认的Node.js断言库,如果有任何需要,我很乐意转移到像Protractor或Chai-as-promised那样更强大的功能,但更细更好。
其次,文件明确规定以下内容:
任何辅助方法,应该按顺序返回值被添加到答应链
这并没有真正意义...我应该回复一个承诺,还是应该在then()
声明中处理整个事情?由于返回一个基本的价值并没有太大的作用。即使如此,我如何处理失败的断言?
我也在代码库中看到过一个恶梦客户端,但我不知道它是否对我的情况有任何用处,因为我刚开始深入了解代码库以便更好地理解定制和扩展CodeceptJs。
任何指针非常感谢