Như đã nói trong các ý kiến, mặc dù tôi ban đầu sử dụng map
, giảm sẽ cho phép bạn làm những gì bạn cần, và ở đẳng cấp này ít nhất có ý nghĩa hơn rất nhiều:
protractor.promise.all([text1, text2, text3]).then(function (values) {
expect(
values.reduce(function(p, v) {
return v.match(/expression/) || p;
}, false)
).toBe(true);
});
Hoặc viết những điều tương tự , nhưng sử dụng ES6 mũi tên chức năng:
protractor.promise.all([text1, text2, text3]).then(function(values) {
exptect(
values.reduce((p, v) => v.match(/expression/) || p, false)
).toBe(true);
});
Cả hai làm điều tương tự, các giảm callback sẽ mặc định là false, cho đến khi biểu thức v.match
để đánh giá đúng.
Tôi giả định này là hiển nhiên đối với hầu hết mọi người, nhưng tôi nghĩ rằng tôi muốn cung cấp cả cú pháp và một số giải thích để tham khảo trong tương lai
Có lẽ giải pháp này có thể được tối ưu hóa hơn một chút, để ngăn chặn phù hợp mô hình một khi trận đấu đơn đã được tìm thấy:
protractor.promise.all([text1, text2, text3]).then(function (values) {
expect(
values.reduce(function(p, v) {
return p || !!v.match(/expression/);
}, false)
).toBe(true);
});
Tất cả tôi đã làm là sử dụng giá trị giảm hiện nay như mặc định (một lần mà đã được thiết lập là true, không có điểm trong thử nghiệm bất kỳ chuỗi giá trị khác). Để đảm bảo v.match
đánh giá thành boolean thay vì mảng, tôi chỉ sử dụng !!v.match()
. Đó là một phần là tùy chọn mặc dù. Trong ES6, điều tương tự như thế này:
protractor.promise.all([text1, text2, text3]).then(function(values) {
exptect(
values.reduce((p, v) => p || !!v.match(/expression/), false)
).toBe(true);
});
Điều này có thể thực hiện tốt hơn với các tập dữ liệu lớn (xem xét match
cuộc gọi chấm dứt một khi trận đấu đầu tiên được tìm thấy, như trái ngược với v.match
được gọi mỗi lần).
Tại sao bạn sẽ không chỉ cần sử dụng một biến ('x = false;') và 'values.map (function (v) {x = v.match (/ expression /) || x; }); 'và sau đó chỉ có' mong đợi (x) .toBe (true); '? –
Có gì sai với 'mong đợi (values.some (function (i) {return /expression/.match(i);}). ToBe (true);'? – haim770
Có vẻ như một matcher tùy chỉnh có thể là con đường để đi: http : //jasmine.github.io/2.0/custom_matcher.html –