当我想知道类似这里提出的问题时,我所做的就是寻找来源。
toBe()
expect().toBe() https://github.com/jasmine/jasmine/blob/4097718b6682f643833f5435b63e4f590f22919f/lib/jasmine-core/jasmine.js#L2779定义为:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
它执行测试===
这意味着当用作expect(foo).toBe(true)
,只有当foo
实际上有其价值true
。真实的值不会让测试通过。
toBeTruthy()
expect().toBeTruthy() https://github.com/jasmine/jasmine/blob/4097718b6682f643833f5435b63e4f590f22919f/lib/jasmine-core/jasmine.js#L2908定义为:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
类型强制
如果将该值强制转换为布尔值会产生该值,则该值为真值true
。操作!!
通过强制传递值来测试真实性expect
为布尔值。请注意,与当前接受的答案相反implies https://stackoverflow.com/revisions/32615803/2, == true
is not对真实性的正确测试。你会得到一些有趣的事情,比如
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
而使用!!
yields:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(是的,无论是否为空,数组都是真实的。)
是真实的()
expect().toBeTrue()
是其一部分茉莉花匹配器 https://github.com/JamieMason/Jasmine-Matchers(在 npm 上注册为jasmine-expect
后来的项目注册后jasmine-matchers
第一的)。
expect().toBeTrue() https://github.com/JamieMason/Jasmine-Matchers/blob/e02982ea40d85761f9d0a9eae8358512a6fad133/src/toBeTrue.js#L7-L11定义为:
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。这文档 https://selenium.googlecode.com/git/docs/api/javascript/module_selenium-webdriver_class_WebElement.html指出所产生的价值.isDisplayed()
是一个承诺boolean
。我会从表面上看它并使用.toBeTrue()
or .toBe(true)
。如果我发现实现返回真值/假值的情况,我会提交错误报告。