From 2a8a4e7fad376f34eec463847d9cf93151ab7d24 Mon Sep 17 00:00:00 2001 From: Peter Bacon Darwin Date: Sat, 15 Nov 2014 18:49:01 +0000 Subject: [PATCH] test(select): refactor option elements expectations to use `toEqualOption` matcher By using a new matcher our tests become less brittle with respect to unimportant extra attributes. --- test/ng/directive/selectSpec.js | 68 +++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index bf16744c..90eb9509 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -38,8 +38,28 @@ describe('select', function() { }; return equals(expectedValues, actualValues); + }, + + toEqualOption: function(value, text, label) { + var errors = []; + if (this.actual.attr('value') !== value) { + errors.push('Expected option value "' + this.actual.attr('value') + '" to equal "' + value + '"'); + } + if (text && this.actual.text() !== text) { + errors.push('Expected option value "' + this.actual.attr('value') + '" to equal "' + value + '"'); + } + if (label && this.actual.attr('label') !== label) { + errors.push('Expected option value "' + this.actual.attr('value') + '" to equal "' + value + '"'); + } + + this.message = function() { + return errors.join('\n'); + }; + + return errors.length === 0; } }); + }); @@ -574,9 +594,9 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(3); - expect(sortedHtml(options[0])).toEqual(''); - expect(sortedHtml(options[1])).toEqual(''); - expect(sortedHtml(options[2])).toEqual(''); + expect(options.eq(0)).toEqualOption('0', 'A'); + expect(options.eq(1)).toEqualOption('1', 'B'); + expect(options.eq(2)).toEqualOption('2', 'C'); }); it('should render zero as a valid display value', function() { @@ -589,9 +609,9 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(3); - expect(sortedHtml(options[0])).toEqual(''); - expect(sortedHtml(options[1])).toEqual(''); - expect(sortedHtml(options[2])).toEqual(''); + expect(options.eq(0)).toEqualOption('0', '0'); + expect(options.eq(1)).toEqualOption('1', '1'); + expect(options.eq(2)).toEqualOption('2', '2'); }); @@ -608,9 +628,9 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(3); - expect(sortedHtml(options[0])).toEqual(''); - expect(sortedHtml(options[1])).toEqual(''); - expect(sortedHtml(options[2])).toEqual(''); + expect(options.eq(0)).toEqualOption('blue', 'blue'); + expect(options.eq(1)).toEqualOption('green', 'green'); + expect(options.eq(2)).toEqualOption('red', 'red'); expect(options[2].selected).toEqual(true); scope.$apply(function() { @@ -630,7 +650,7 @@ describe('select', function() { }); expect(element.find('option').length).toEqual(1); // because we add special empty option - expect(sortedHtml(element.find('option')[0])).toEqual(''); + expect(element.find('option')).toEqualOption('?',''); scope.$apply(function() { scope.values.push({name:'A'}); @@ -638,15 +658,15 @@ describe('select', function() { }); expect(element.find('option').length).toEqual(1); - expect(sortedHtml(element.find('option')[0])).toEqual(''); + expect(element.find('option')).toEqualOption('0', 'A'); scope.$apply(function() { scope.values.push({name:'B'}); }); expect(element.find('option').length).toEqual(2); - expect(sortedHtml(element.find('option')[0])).toEqual(''); - expect(sortedHtml(element.find('option')[1])).toEqual(''); + expect(element.find('option').eq(0)).toEqualOption('0', 'A'); + expect(element.find('option').eq(1)).toEqualOption('1', 'B'); }); @@ -665,15 +685,15 @@ describe('select', function() { }); expect(element.find('option').length).toEqual(2); - expect(sortedHtml(element.find('option')[0])).toEqual(''); - expect(sortedHtml(element.find('option')[1])).toEqual(''); + expect(element.find('option').eq(0)).toEqualOption('0', 'A'); + expect(element.find('option').eq(1)).toEqualOption('1', 'B'); scope.$apply(function() { scope.values.pop(); }); expect(element.find('option').length).toEqual(1); - expect(sortedHtml(element.find('option')[0])).toEqual(''); + expect(element.find('option')).toEqualOption('0', 'A'); scope.$apply(function() { scope.values.pop(); @@ -725,9 +745,9 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(3); - expect(sortedHtml(options[0])).toEqual(''); - expect(sortedHtml(options[1])).toEqual(''); - expect(sortedHtml(options[2])).toEqual(''); + expect(options.eq(0)).toEqualOption('0', 'B'); + expect(options.eq(1)).toEqualOption('1', 'C'); + expect(options.eq(2)).toEqualOption('2', 'D'); }); @@ -771,7 +791,7 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(1); - expect(sortedHtml(options[0])).toEqual(''); + expect(options.eq(0)).toEqualOption('regularProperty', 'visible'); }); it('should allow expressions over multiple lines', function() { @@ -795,8 +815,8 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(3); - expect(sortedHtml(options[1])).toEqual(''); - expect(sortedHtml(options[2])).toEqual(''); + expect(options.eq(1)).toEqualOption('0', '2'); + expect(options.eq(2)).toEqualOption('1', '3'); }); it('should not update selected property of an option element on digest with no change event', @@ -953,8 +973,8 @@ describe('select', function() { var options = element.find('option'); expect(options.length).toEqual(2); - expect(sortedHtml(options[0])).toEqual(''); - expect(sortedHtml(options[1])).toEqual(''); + expect(options.eq(0)).toEqualOption('0', 'C'); + expect(options.eq(1)).toEqualOption('1', 'B'); });