무엇 사이의 차이 expect(something).toBe(true)
, expect(something).toBeTruthy()
그리고 expect(something).toBeTrue()
?
참고 toBeTrue()
A는 사용자 정의 정규 도입 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
입니다 하지 truthiness에 대한 정확한 테스트. 당신은 같은 재미있는 것들을 얻을 것이다
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
!!
수율을 사용하는 반면 :
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(예, 비어 있든 아니든 배열은 진실입니다.)
toBeTrue ()
expect().toBeTrue()
Jasmine-Matchers의 일부입니다 ( jasmine-expect
나중에 프로젝트를 jasmine-matchers
먼저 등록한 후 npm에 등록됨 ).
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()
A와 해결합니다 약속입니다 boolean
. 나는 얼굴 값과 사용에 걸릴 것 .toBeTrue()
나 .toBe(true)
. 구현이 진실 / 거짓 값을 반환하는 경우를 발견하면 버그 보고서를 제출합니다.
답변
자바 스크립트에는 진실과 진실이 있습니다. 무언가가 진실 일 때 그것은 분명히 진실이거나 거짓입니다. 어떤 것이 진실되면 부울 일 수도 있고 아닐 수도 있지만, “캐스트”값은 부울입니다.
예.
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
,null
,NaN
,undefined
또는[]
(빈 배열) *을.* 실행
!![]
하면 반환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()
값의 배열을 반환하고 기대 모든 종류의 있도록 ( getText
, isPresent
, 등)을 수행 할 수 있습니다 toBeTruthy()
때 .all()
그림으로 온다. 도움이 되었기를 바랍니다.