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.
This commit is contained in:
Peter Bacon Darwin
2014-11-15 18:49:01 +00:00
parent beeb64a6f6
commit 2a8a4e7fad

View File

@@ -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('<option value="0">A</option>');
expect(sortedHtml(options[1])).toEqual('<option value="1">B</option>');
expect(sortedHtml(options[2])).toEqual('<option value="2">C</option>');
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('<option value="0">0</option>');
expect(sortedHtml(options[1])).toEqual('<option value="1">1</option>');
expect(sortedHtml(options[2])).toEqual('<option value="2">2</option>');
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('<option value="blue">blue</option>');
expect(sortedHtml(options[1])).toEqual('<option value="green">green</option>');
expect(sortedHtml(options[2])).toEqual('<option value="red">red</option>');
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('<option value="?"></option>');
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('<option value="0">A</option>');
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('<option value="0">A</option>');
expect(sortedHtml(element.find('option')[1])).toEqual('<option value="1">B</option>');
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('<option value="0">A</option>');
expect(sortedHtml(element.find('option')[1])).toEqual('<option value="1">B</option>');
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('<option value="0">A</option>');
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('<option value="0">B</option>');
expect(sortedHtml(options[1])).toEqual('<option value="1">C</option>');
expect(sortedHtml(options[2])).toEqual('<option value="2">D</option>');
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('<option value="regularProperty">visible</option>');
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('<option value="0">2</option>');
expect(sortedHtml(options[2])).toEqual('<option value="1">3</option>');
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('<option value="0">C</option>');
expect(sortedHtml(options[1])).toEqual('<option value="1">B</option>');
expect(options.eq(0)).toEqualOption('0', 'C');
expect(options.eq(1)).toEqualOption('1', 'B');
});