Những gì tôi làm khi tôi tự hỏi một cái gì đó giống như câu hỏi được hỏi ở đây là đi đến nguồn.
được()
expect().toBe()
được định nghĩa là:
function toBe() {
return {
compare: function(actual, expected) {
return {
pass: actual === expected
};
}
};
}
Nó thực hiện thử nghiệm của mình với ===
nghĩa là khi được sử dụng expect(foo).toBe(true)
, nó sẽ chỉ vượt qua nếu foo
thực sự có giá trị true
. Giá trị trung thực sẽ không làm cho bài kiểm tra vượt qua.
toBeTruthy ()
expect().toBeTruthy()
được định nghĩa là:
function toBeTruthy() {
return {
compare: function(actual) {
return {
pass: !!actual
};
}
};
}
Loại cưỡng chế
Một giá trị là trung thực nếu sự ép buộc của giá trị này đối với boolean mang lại giá trị true
. Các hoạt động !!
kiểm tra tính trung thực bằng cách ép buộc giá trị được chuyển expect
đến một boolean. Lưu ý rằng trái với những gì các câu trả lời chấp nhận hiện nay ngụ ý , == true
là không một thử nghiệm chính xác cho truthiness. Bạn sẽ nhận được những điều hài hước như
> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false
Trong khi sử dụng !!
sản lượng:
> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![]
true
(Có, trống hay không, một mảng là trung thực.)
toBeTrue ()
expect().toBeTrue()
là một phần của Jasmine-Matchers (được đăng ký vào npm như jasmine-expect
sau khi dự án sau được đăng ký jasmine-matchers
trước).
expect().toBeTrue()
được định nghĩa là:
function toBeTrue(actual) {
return actual === true ||
is(actual, 'Boolean') &&
actual.valueOf();
}
Sự khác biệt với expect().toBeTrue()
và expect().toBe(true)
là expect().toBeTrue()
kiểm tra xem nó có đang xử lý một Boolean
đối tượng hay không. expect(new Boolean(true)).toBe(true)
sẽ thất bại trong khi expect(new Boolean(true)).toBeTrue()
sẽ vượt qua. Điều này là do điều buồn cười này:
> new Boolean(true) === true
false
> new Boolean(true) === false
false
Ít nhất đó là sự thật:
> !!new Boolean(true)
true
Cái nào phù hợp nhất để sử dụng với elem.isDisplayed()
?
Cuối cùng Protractor đưa ra yêu cầu này cho Selenium. Các tài liệu nói rằng giá trị được tạo ra .isDisplayed()
là một lời hứa giải quyết cho a boolean
. Tôi sẽ lấy nó theo mệnh giá và sử dụng .toBeTrue()
hoặc .toBe(true)
. Nếu tôi tìm thấy một trường hợp trong đó việc triển khai trả về các giá trị trung thực / giả, tôi sẽ nộp báo cáo lỗi.
.toBe(true)
==.toBeTrue()
. toBeTruthy () có thể đúng không chỉ đúng mà còn trên 123 , "dfgdfg", [1,2,3], v.v ... về cơ bảnif(x==true)
là đúng, trong khi đóif(x===true)
là sự thật.