toContain works with array-like objects (Arguments, HTMLCollections, etc)

Fix #699
This commit is contained in:
Charles Hansen
2014-10-30 11:57:24 -07:00
committed by slackersoft
parent cf83ae474c
commit 663fbd0cdb
3 changed files with 21 additions and 2 deletions

View File

@@ -2195,7 +2195,12 @@ getJasmineRequireObj().matchersUtil = function(j$) {
}
return false;
}
return !!haystack && haystack.indexOf(needle) >= 0;
if (!haystack) {
return false;
} else {
var indexOf = haystack.indexOf || Array.prototype.indexOf;
return indexOf.call(haystack, needle) >= 0;
}
},
buildFailureMessage: function() {

View File

@@ -207,6 +207,15 @@ describe("matchersUtil", function() {
it("fails when actual is null", function() {
expect(j$.matchersUtil.contains(null, 'A')).toBe(false);
});
it("passes with array-like objects", function() {
var capturedArgs = null;
function testFunction(){
capturedArgs = arguments;
}
testFunction('foo', 'bar');
expect(j$.matchersUtil.contains(capturedArgs, 'bar')).toBe(true);
});
});
describe("buildMessage", function() {

View File

@@ -19,7 +19,12 @@ getJasmineRequireObj().matchersUtil = function(j$) {
}
return false;
}
return !!haystack && haystack.indexOf(needle) >= 0;
if (!haystack) {
return false;
} else {
var indexOf = haystack.indexOf || Array.prototype.indexOf;
return indexOf.call(haystack, needle) >= 0;
}
},
buildFailureMessage: function() {