gpt4 book ai didi

javascript - toBe(true) vs toBeTruthy() vs toBeTrue()

转载 作者:IT王子 更新时间:2023-10-29 02:38:25 25 4
gpt4 key购买 nike

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。真值不会使测试通过。

toBeTruthy()

expect().toBeTruthy()定义为:

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 )。

expect().toBeTrue()定义为:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com