学习 NightWatch - 断言
断言
使用时,若断言失败,则停止运行测试,否则继续
// ...
// .logo 会出现
// 否则终止运行
browser.assert.visible('.logo')
// ...
来自 Node.js 的断言模块也可以使用
.not
用于取反
// ...
// .logo 不会出现
// 否则终止运行
browser.assert.not.visible('.logo')
// ...
自动重试
默认情况下,NightWatch 会自动重试失败的断言,可在配置文件中配置超时时间(单位:ms)
// nightwatch.conf.js
{
// ...
retryAssertionTimeout: 5000
// ...
}
BDD式断言
提高可读性 只是连接词,无具体作用
to到be是been曾经is是that那个which哪一个and和has有have有with具有at在of属于same相同的but但是does做still还also而且
方法
测试值
.ok断言目标为真值.true断言目标为 true,不做类型转换,即 true === true.false断言目标为 false,不做类型转换,即 false === false.null断言目标为 null,不做类型转换,即 null === null.undefined断言目标为 undefined,不做类型转换,即 undefined === undefined.NaN断言目标为 NaN.exist断言目标存在,即非 null 也非 undefined.empty断言目标长度为 0,对于数组、字符串,检查 length 属性,对于对象,检查可枚举属性数量.arguments断言对象是一个参数对象 arguments.instanceof(Constructor)断言目标是 构造函数Constructor 的实例.a(String) / .an(String)是否是某个类型 可作为语言链亦可作为断言使用
判断
.equal(value)断言 目标 === value.eql(value)断言 目标深等于 value 相等于 deep.equal(value) 缩写.above(Number)断言目标大于(超过)Number.least(Number)断言目标大于或等于 Number.below(Number)断言目标小于 Number.most(Number)断言目标不小于或等于 Number.within(Start, End)断言目标在 Start - End 区间内以上 皆可在 length 后跟随,相比直接提供长度好处为提供了更详细的错误信息
closeTo(Number1, Number2)期望目标为 Number1, 误差在 Number2 上下.not对之后的断言取反
对象
.extendsible断言目标是可拓展(可添加新属性).sealed断言目标是封闭的(无法添加新属性和删除属性,但可被修改).frozen断言目标是冻结的(无法增删改属性).keys(key1[, key2, ...])- key: String | Array | Object 属性名
断言目标包含传入的属性名,与 any, all, contains,或 have 前缀配合使用时会影响结果
与 any 结合时,无论是 have 或 contains 前缀,必须存在任意传入属性才能通过,any 或 all 至少使用一个,否则默认 all
结合 all 和 contains 时,必须包含全部传入属性,但是可以拥有其他未传入属性
结合 all 和 have 时,必须且只能包含传入属性
.include(Object | String | Number)/ contains(Object | String | Number) 判断数组,字符串是否包含某值可作为属性类断言前缀语言链,当作为语言链使用时,常用于 keys() 断言之前
ownProperty(key)断言目标具有名为 key 的自有属性ownPropertyDescription(key[, descriptor])断言目标自有属性 key 存在描述符对象如果给定描述符对象 descriptor,则必须匹配
.any&.all- .any 在 keys 断言之前使用 any 标记 (与 all 相反) 任意一个
- .all 在 keys 断言之前使用 all 标记 (与 any 相反) 全部所有
函数
.change(Object, String)断言目标方法会更改Object[String].increase(Object, String)断言目标方法会增加Object[String].decrease(Object, String)断言目标方法会删除Object[String].throw(ErrorConstructor | String | RegExp)断言目标函数会抛出一个指定错误或错误类型(使用 instanceOf 计算)也可使用正则表达式或字符串检查错误信息
数组
.members(Array)断言目标是 Array 的超集,或目标有 Array 所有 === 的成员,若设置 deep 标记,则成员进行深度比较(include / contains 只能接受单个值,可判断数组字符串,members 接受数组,只判断数组)
.oneOf(Array)断言目标出现在 Array 的某个顶层位置(直接子元素,严格相等)
字符串
.match(RegExp)断言目标匹配 RegExp 正则表达式.string(String)断言目标字符串包含 String
.deep
设置 deep 标记,然后使用 equal 或 peoperty 断言,该标记可让之后的断言不比较对象本身而是递归比较对象键值对
deep.property 中特殊符号通过 \\ 转义,第一个 \ 转义第二个 \, 第二个 \ 在 property 中进行转义
expect(foo).to.deep.equal({ bar: 'baz'})
expect({ foo: { bar: { baz: 'quux'}}})
.to.have.deep.property('foo.bar.baz', 'quux')
.property(key, [value]) 断言目标是否具有某个为 key 的属性
如果提供了 value 则值必须严格等于 value,若设置了 deep,则可使用 . 或 [] 指向对象和数组的深层属性
同时,property 会将断言主语由原先对象变更为当前属性值,使其后可以针对此属性值测试
只有使用 deep 时,property 中的 . [] 才必须使用 \\ 转义
.length 设置 .have.length 标记作为 length 比较属性值的前缀
.lengthOf(Number) 断言目标的 length 为 Number
.respondTo(String) 断言目标类或对象会响应一个方法(存在此方法)
.itself 设置 itself 标记,然后使用 .respondTo 检查是否为挂载于构造函数本身的方法
.satisfy(value:any => Boolean) 传入 value 代表目标值,返回一个布尔值
count 计数
expect.elements(Elements).count.to.equal(5);