Lưu ý: Giải pháp này chứa cú pháp cho các phiên bản trước Jasmine v2.0. Để biết thêm thông tin về quẹt tùy chỉnh bây giờ, xem: https://jasmine.github.io/2.0/custom_matcher.html
Matchers.js làm việc với một 'modifier kết quả' duy nhất mà thôi - not
:
lõi/Spec.js:
jasmine.Spec.prototype.expect = function(actual) {
var positive = new (this.getMatchersClass_())(this.env, actual, this);
positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
return positive;
core/Matchers.js:
jasmine.Matchers = function(env, actual, spec, opt_isNot) {
...
this.isNot = opt_isNot || false;
}
...
jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
return function() {
...
if (this.isNot) {
result = !result;
}
}
}
Vì vậy, có vẻ như bạn thực sự cần viết trình kết nối của riêng bạn (từ trong một số before
hoặc it
khối cho đúng this
). Ví dụ:
this.addMatchers({
toBeAnyOf: function(expecteds) {
var result = false;
for (var i = 0, l = expecteds.length; i < l; i++) {
if (this.actual === expecteds[i]) {
result = true;
break;
}
}
return result;
}
});
Tôi đã kiểm tra tài liệu và tôi đã thử một số mã, nhưng tôi nghĩ chúng tôi không thể làm điều đó "dễ dàng". Tuy nhiên, theo những gì tôi đã tìm thấy, bạn có thể tạo ra sự kết hợp "có thể thay đổi" của riêng mình. – Magus