toBe(true)与toBeTruthy()与toBeTrue()

2020/10/24 09:41 · javascript ·  · 0评论

之间有什么区别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
      };
    }
  };
}

类型强制

如果将此值强制转换为布尔值,则该值为真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的一部分(Jasmine-Matchers的成员已在npm上注册,就像jasmine-expect注册一个更高的项目一样jasmine-matchers)。

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

最终,量角器将此请求交给了Selenium。文档指出所产生的值.isDisplayed()是一个承诺解析为一个boolean我会从表面上看待它,并使用.toBeTrue().toBe(true)如果我发现实现返回真/假值的情况,我将提交一个错误报告。

在javascript中有对与对。当某件事是正确的时,显然是正确的还是错误的。当某件事是真实的时,它可以是布尔值,也可以不是布尔值,但是“ cast”值是布尔值。

例子。

true == true; // (true) true
1 == true; // (true) truthy
"hello" == true;  // (true) truthy
[1, 2, 3] == true; // (true) truthy
[] == false; // (true) truthy
false == false; // (true) true
0 == false; // (true) truthy
"" == false; // (true) truthy
undefined == false; // (true) truthy
null == false; // (true) truthy

如果要检查是否设置了字符串或数组具有任何值,则可以简化操作。

var users = [];

if(users) {
  // this array is populated. do something with the array
}

var name = "";

if(!name) {
  // you forgot to enter your name!
}

并如上所述。expect(something).toBe(true)并且expect(something).toBeTrue()是相同的。但是expect(something).toBeTruthy()两者都不一样。

Disclamer:这只是一个疯狂的猜测

我知道每个人都喜欢一个易于阅读的清单:

  • toBe(<value>) -返回值与 <value>
  • toBeTrue() -检查返回的值是否为 true
  • toBeTruthy() -检查当转换为布尔值时,该值是否为真实值

    Truthy值是不是所有的值0''(空字符串), ,false(空数组)*。nullNaNundefined[]

    *请注意,当您运行时!![],它会返回true,但是当您运行时,[] == false它也会返回true这取决于它的实现方式。换一种说法:(!![]) === ([] == false)


在你的榜样,toBe(true)toBeTrue()会产生相同的结果。

有很多很好的答案,我只是想添加一个使用这些期望值可能会有所帮助的方案。使用element.all(xxx),如果我需要检查一次是否显示所有元素,则可以执行-

expect(element.all(xxx).isDisplayed()).toBeTruthy(); //Expectation passes
expect(element.all(xxx).isDisplayed()).toBe(true); //Expectation fails
expect(element.all(xxx).isDisplayed()).toBeTrue(); //Expectation fails

原因是.all()返回值的阵列等各种预期(getTextisPresent等...)可以与执行toBeTruthy().all()进入图片。希望这可以帮助。

本文地址:http://javascript.askforanswer.com/tobetrueyutobetruthyyutobetrue.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!