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

什么是expect(something).toBe(true),expect(something).toBeTruthy()和expect(something).toBeTrue()的区别?

注意toBeTrue()是一个自定义匹配器,在jasmine-matchers中引入,其他有用的和方便的匹配器,如toHaveMethod()或toBeArrayOfStrings()。

问题是通用的,但作为一个真实世界的例子,我测试一个元素是显示在量角器。在这种情况下我应该使用哪个匹配器?

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
      };
    }
  };
}

类型强制

如果强制将此值强制为布尔值,则该值为真值。操作!通过强制传递给期望的值到布尔值来测试真实性。注意,与目前接受的答案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的一部分(在npm上注册为jasmine-expect,后面的项目注册了茉莉花匹配器)。

expect().toBeTrue()定义为:

function toBeTrue(actual) {
  return actual === true ||
    is(actual, 'Boolean') &&
    actual.valueOf();
}

与expect()。toBeTrue()和expect()。toBe(true)的区别是expect()。toBeTrue()测试是否处理一个布尔对象。 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。 documentation声明由.isDisplayed()生成的值是一个解析为布尔值的promise。我会把它的面值,并使用.toBeTrue()或.toBe(true)。如果我发现一个情况下,实现返回truey / falsy值,我会提交一个错误报告。

http://stackoverflow.com/questions/32615713/tobetrue-vs-tobetruthy-vs-tobetrue

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – toBe(true)vs toBeTruthy()vs toBeTrue()