Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 195deca

Browse files
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.
1 parent 85eb966 commit 195deca

File tree

1 file changed

+49
-29
lines changed

1 file changed

+49
-29
lines changed

test/ng/directive/selectSpec.js

+49-29
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,28 @@ describe('select', function() {
3838
};
3939

4040
return equals(expectedValues, actualValues);
41+
},
42+
43+
toEqualOption: function(value, text, label) {
44+
var errors = [];
45+
if (this.actual.attr('value') !== value) {
46+
errors.push('Expected option value "' + this.actual.attr('value') + '" to equal "' + value + '"');
47+
}
48+
if (text && this.actual.text() !== text) {
49+
errors.push('Expected option value "' + this.actual.attr('value') + '" to equal "' + value + '"');
50+
}
51+
if (label && this.actual.attr('label') !== label) {
52+
errors.push('Expected option value "' + this.actual.attr('value') + '" to equal "' + value + '"');
53+
}
54+
55+
this.message = function() {
56+
return errors.join('\n');
57+
};
58+
59+
return errors.length === 0;
4160
}
4261
});
62+
4363
});
4464

4565

@@ -756,9 +776,9 @@ describe('select', function() {
756776

757777
var options = element.find('option');
758778
expect(options.length).toEqual(3);
759-
expect(sortedHtml(options[0])).toEqual('<option value="?"></option>');
760-
expect(sortedHtml(options[1])).toEqual('<option value="10">ten</option>');
761-
expect(sortedHtml(options[2])).toEqual('<option value="20">twenty</option>');
779+
expect(options.eq(0)).toEqualOption('?', '');
780+
expect(options.eq(1)).toEqualOption('10', 'ten');
781+
expect(options.eq(2)).toEqualOption('20', 'twenty');
762782
});
763783

764784
it('should preserve value even when reference has changed (single&array)', function() {
@@ -1047,9 +1067,9 @@ describe('select', function() {
10471067

10481068
var options = element.find('option');
10491069
expect(options.length).toEqual(3);
1050-
expect(sortedHtml(options[0])).toEqual('<option value="0">A</option>');
1051-
expect(sortedHtml(options[1])).toEqual('<option value="1">B</option>');
1052-
expect(sortedHtml(options[2])).toEqual('<option value="2">C</option>');
1070+
expect(options.eq(0)).toEqualOption('0', 'A');
1071+
expect(options.eq(1)).toEqualOption('1', 'B');
1072+
expect(options.eq(2)).toEqualOption('2', 'C');
10531073
});
10541074

10551075
it('should render zero as a valid display value', function() {
@@ -1062,9 +1082,9 @@ describe('select', function() {
10621082

10631083
var options = element.find('option');
10641084
expect(options.length).toEqual(3);
1065-
expect(sortedHtml(options[0])).toEqual('<option value="0">0</option>');
1066-
expect(sortedHtml(options[1])).toEqual('<option value="1">1</option>');
1067-
expect(sortedHtml(options[2])).toEqual('<option value="2">2</option>');
1085+
expect(options.eq(0)).toEqualOption('0', '0');
1086+
expect(options.eq(1)).toEqualOption('1', '1');
1087+
expect(options.eq(2)).toEqualOption('2', '2');
10681088
});
10691089

10701090

@@ -1081,9 +1101,9 @@ describe('select', function() {
10811101

10821102
var options = element.find('option');
10831103
expect(options.length).toEqual(3);
1084-
expect(sortedHtml(options[0])).toEqual('<option value="blue">blue</option>');
1085-
expect(sortedHtml(options[1])).toEqual('<option value="green">green</option>');
1086-
expect(sortedHtml(options[2])).toEqual('<option value="red">red</option>');
1104+
expect(options.eq(0)).toEqualOption('blue', 'blue');
1105+
expect(options.eq(1)).toEqualOption('green', 'green');
1106+
expect(options.eq(2)).toEqualOption('red', 'red');
10871107
expect(options[2].selected).toEqual(true);
10881108

10891109
scope.$apply(function() {
@@ -1103,23 +1123,23 @@ describe('select', function() {
11031123
});
11041124

11051125
expect(element.find('option').length).toEqual(1); // because we add special empty option
1106-
expect(sortedHtml(element.find('option')[0])).toEqual('<option value="?"></option>');
1126+
expect(element.find('option')).toEqualOption('?','');
11071127

11081128
scope.$apply(function() {
11091129
scope.values.push({name:'A'});
11101130
scope.selected = scope.values[0];
11111131
});
11121132

11131133
expect(element.find('option').length).toEqual(1);
1114-
expect(sortedHtml(element.find('option')[0])).toEqual('<option value="0">A</option>');
1134+
expect(element.find('option')).toEqualOption('0', 'A');
11151135

11161136
scope.$apply(function() {
11171137
scope.values.push({name:'B'});
11181138
});
11191139

11201140
expect(element.find('option').length).toEqual(2);
1121-
expect(sortedHtml(element.find('option')[0])).toEqual('<option value="0">A</option>');
1122-
expect(sortedHtml(element.find('option')[1])).toEqual('<option value="1">B</option>');
1141+
expect(element.find('option').eq(0)).toEqualOption('0', 'A');
1142+
expect(element.find('option').eq(1)).toEqualOption('1', 'B');
11231143
});
11241144

11251145

@@ -1138,15 +1158,15 @@ describe('select', function() {
11381158
});
11391159

11401160
expect(element.find('option').length).toEqual(2);
1141-
expect(sortedHtml(element.find('option')[0])).toEqual('<option value="0">A</option>');
1142-
expect(sortedHtml(element.find('option')[1])).toEqual('<option value="1">B</option>');
1161+
expect(element.find('option').eq(0)).toEqualOption('0', 'A');
1162+
expect(element.find('option').eq(1)).toEqualOption('1', 'B');
11431163

11441164
scope.$apply(function() {
11451165
scope.values.pop();
11461166
});
11471167

11481168
expect(element.find('option').length).toEqual(1);
1149-
expect(sortedHtml(element.find('option')[0])).toEqual('<option value="0">A</option>');
1169+
expect(element.find('option')).toEqualOption('0', 'A');
11501170

11511171
scope.$apply(function() {
11521172
scope.values.pop();
@@ -1198,9 +1218,9 @@ describe('select', function() {
11981218

11991219
var options = element.find('option');
12001220
expect(options.length).toEqual(3);
1201-
expect(sortedHtml(options[0])).toEqual('<option value="0">B</option>');
1202-
expect(sortedHtml(options[1])).toEqual('<option value="1">C</option>');
1203-
expect(sortedHtml(options[2])).toEqual('<option value="2">D</option>');
1221+
expect(options.eq(0)).toEqualOption('0', 'B');
1222+
expect(options.eq(1)).toEqualOption('1', 'C');
1223+
expect(options.eq(2)).toEqualOption('2', 'D');
12041224
});
12051225

12061226

@@ -1244,7 +1264,7 @@ describe('select', function() {
12441264

12451265
var options = element.find('option');
12461266
expect(options.length).toEqual(1);
1247-
expect(sortedHtml(options[0])).toEqual('<option value="regularProperty">visible</option>');
1267+
expect(options.eq(0)).toEqualOption('regularProperty', 'visible');
12481268
});
12491269

12501270
it('should allow expressions over multiple lines', function() {
@@ -1268,8 +1288,8 @@ describe('select', function() {
12681288

12691289
var options = element.find('option');
12701290
expect(options.length).toEqual(3);
1271-
expect(sortedHtml(options[1])).toEqual('<option value="0">2</option>');
1272-
expect(sortedHtml(options[2])).toEqual('<option value="1">3</option>');
1291+
expect(options.eq(1)).toEqualOption('0', '2');
1292+
expect(options.eq(2)).toEqualOption('1', '3');
12731293
});
12741294

12751295
it('should not update selected property of an option element on digest with no change event',
@@ -1426,8 +1446,8 @@ describe('select', function() {
14261446

14271447
var options = element.find('option');
14281448
expect(options.length).toEqual(2);
1429-
expect(sortedHtml(options[0])).toEqual('<option value="0">C</option>');
1430-
expect(sortedHtml(options[1])).toEqual('<option value="1">B</option>');
1449+
expect(options.eq(0)).toEqualOption('0', 'C');
1450+
expect(options.eq(1)).toEqualOption('1', 'B');
14311451
});
14321452

14331453

@@ -1447,8 +1467,8 @@ describe('select', function() {
14471467

14481468
var options = element.find('option');
14491469
expect(options.length).toEqual(2);
1450-
expect(sortedHtml(options[0])).toEqual('<option value="a">C</option>');
1451-
expect(sortedHtml(options[1])).toEqual('<option value="b">B</option>');
1470+
expect(options.eq(0)).toEqualOption('a', 'C');
1471+
expect(options.eq(1)).toEqualOption('b', 'B');
14521472
});
14531473

14541474

0 commit comments

Comments
 (0)