diff --git a/src/ng/filter/filter.js b/src/ng/filter/filter.js index a739a1ca21c7..19e51878d5e4 100644 --- a/src/ng/filter/filter.js +++ b/src/ng/filter/filter.js @@ -196,7 +196,7 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp) { } else if (expectedType === 'object') { for (key in expected) { var expectedVal = expected[key]; - if (isFunction(expectedVal)) { + if (isFunction(expectedVal) || isUndefined(expectedVal)) { continue; } diff --git a/test/ng/filter/filterSpec.js b/test/ng/filter/filterSpec.js index 7e14f5f567f4..44157b020e21 100644 --- a/test/ng/filter/filterSpec.js +++ b/test/ng/filter/filterSpec.js @@ -48,6 +48,15 @@ describe('Filter: filter', function() { }); + it('should filter when a specific property is undefined', function() { + var items = [{name: 'a'}, {name: 'abc'}]; + expect(filter(items, {name: undefined})).toEqual([{name: 'a'}, {name: 'abc'}]); + + items = [{first: 'misko'}, {deep: {first: 'misko'}}, {deep: {last: 'hevery'}}]; + expect(filter(items, {deep: {first: undefined}})).toEqual([{deep: {first: 'misko'}}, {deep: {last: 'hevery'}}]); + }); + + it('should take function as predicate', function() { var items = [{name: 'a'}, {name: 'abc', done: true}]; expect(filter(items, function(i) {return i.done;}).length).toBe(1);