- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
expect(something).toBe(true)
、expect(something).toBeTruthy()
和 expect(something).toBeTrue 之间有什么区别()
?
请注意,toBeTrue()
是在 jasmine-matchers
中引入的自定义匹配器以及其他有用且方便的匹配器,例如 toHaveMethod()
或 toBeArrayOfStrings()
。
这个问题是通用的,但是,作为一个真实世界的例子,我正在测试一个元素是否显示在 protractor
中。在这种情况下我应该使用哪个匹配器?
expect(elm.isDisplayed()).toBe(true);
expect(elm.isDisplayed()).toBeTruthy();
expect(elm.isDisplayed()).toBeTrue();
最佳答案
当我想知道类似此处提出的问题时,我所做的就是找到源头。
expect().toBe()
定义为:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
它使用 ===
执行测试,这意味着当用作 expect(foo).toBe(true)
时,只有当 foo 时它才会通过
实际上具有值 true
。真值不会使测试通过。
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
如果将此值强制转换为 bool 值产生值 true
,则该值是 truthy。 !!
操作通过将传递给 expect
的值强制转换为 bool 值来测试真实性。请注意,与当前接受的答案相反 implies , == 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 的一部分(在后来的项目首先注册了 jasmine-matchers
之后,它在 npm 上注册为 jasmine-expect
)。
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
expect().toBeTrue()
和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。 documentation指出 .isDisplayed()
产生的值是一个解析为 boolean
的 promise 。我会从表面上看它并使用 .toBeTrue()
或 .toBe(true)
。如果我发现实现返回真/假值的情况,我会提交错误报告。
关于javascript - toBe(true) vs toBeTruthy() vs toBeTrue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32615713/
expect(something).toBe(true)、expect(something).toBeTruthy() 和 expect(something).toBeTrue 之间有什么区别()?
我是一名优秀的程序员,十分优秀!