当我想知道这里提出的问题时,我会做的是去源头。
成为()
expect().toBe()
定义为:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
它执行它的测试,===
这意味着当使用 as 时expect(foo).toBe(true)
,它只有在foo
实际具有值时才会通过true
。真实值不会使测试通过。
toBeTruthy()
expect().toBeTruthy()
定义为:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
类型强制
如果将该值强制转换为布尔值,则该值是真值true
。该操作通过将传递给的值强制为布尔!!
值来测试真实性。expect
请注意,与当前接受的答案所暗示的相反,这== true
不是对真实性的正确测试。你会得到一些有趣的东西,比如
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
而使用!!
产量:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(是的,无论是否为空,数组都是真实的。)
是真实的()
expect().toBeTrue()
是Jasmine-Matchers的一部分(它在 npm 上注册,就像jasmine-expect
在后面的项目jasmine-matchers
首先注册之后一样)。
expect().toBeTrue()
定义为:
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
与expect().toBeTrue()
and的区别expect().toBe(true)
在于它expect().toBeTrue()
测试它是否正在处理一个Boolean
对象。expect(new Boolean(true)).toBe(true)
会失败而expect(new Boolean(true)).toBeTrue()
会通过。这是因为这个有趣的事情:
> new Boolean(true) === true
false
> new Boolean(true) === false
false
至少它是真实的:
> !!new Boolean(true)
true
哪个最适合与 一起使用elem.isDisplayed()
?
最终,Protractor 将此请求交给 Selenium。文档指出,由 产生的值是.isDisplayed()
一个解析为boolean
. 我会从表面上看它并使用.toBeTrue()
or .toBe(true)
。如果我发现实现返回真/假值的情况,我会提交错误报告。