Added expect().withContext() to provide additional information in failure messages
This commit is contained in:
@@ -488,5 +488,88 @@ describe("Expectation", function() {
|
|||||||
error: customError
|
error: customError
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("#withContext", function() {
|
||||||
|
it("prepends the context to the generated failure message", function() {
|
||||||
|
var matchers = {
|
||||||
|
toFoo: function() {
|
||||||
|
return {
|
||||||
|
compare: function() { return { pass: false }; }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
util = {
|
||||||
|
buildFailureMessage: function() { return "failure message"; }
|
||||||
|
},
|
||||||
|
addExpectationResult = jasmine.createSpy("addExpectationResult"),
|
||||||
|
expectation = jasmineUnderTest.Expectation.Factory({
|
||||||
|
customMatchers: matchers,
|
||||||
|
util: util,
|
||||||
|
actual: "an actual",
|
||||||
|
addExpectationResult: addExpectationResult
|
||||||
|
});
|
||||||
|
|
||||||
|
expectation.withContext("Some context").toFoo("hello");
|
||||||
|
|
||||||
|
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||||
|
jasmine.objectContaining({
|
||||||
|
message: "Some context: failure message"
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("prepends the context to a custom failure message", function() {
|
||||||
|
var matchers = {
|
||||||
|
toFoo: function() {
|
||||||
|
return {
|
||||||
|
compare: function() { return { pass: false, message: "msg" }; }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addExpectationResult = jasmine.createSpy("addExpectationResult"),
|
||||||
|
expectation = jasmineUnderTest.Expectation.Factory({
|
||||||
|
customMatchers: matchers,
|
||||||
|
actual: "an actual",
|
||||||
|
addExpectationResult: addExpectationResult
|
||||||
|
});
|
||||||
|
|
||||||
|
expectation.withContext("Some context").toFoo("hello");
|
||||||
|
|
||||||
|
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||||
|
jasmine.objectContaining({
|
||||||
|
message: "Some context: msg"
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("prepends the context to a custom failure message from a function", function() {
|
||||||
|
var matchers = {
|
||||||
|
toFoo: function() {
|
||||||
|
return {
|
||||||
|
compare: function() {
|
||||||
|
return {
|
||||||
|
pass: false,
|
||||||
|
message: function() { return "msg"; }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addExpectationResult = jasmine.createSpy("addExpectationResult"),
|
||||||
|
expectation = jasmineUnderTest.Expectation.Factory({
|
||||||
|
customMatchers: matchers,
|
||||||
|
actual: "an actual",
|
||||||
|
addExpectationResult: addExpectationResult
|
||||||
|
});
|
||||||
|
|
||||||
|
expectation.withContext("Some context").toFoo("hello");
|
||||||
|
|
||||||
|
expect(addExpectationResult).toHaveBeenCalledWith(false,
|
||||||
|
jasmine.objectContaining({
|
||||||
|
message: "Some context: msg"
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -62,19 +62,27 @@ getJasmineRequireObj().Expectation = function(j$) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Expectation.prototype.buildMessage = function(result, name, args) {
|
Expectation.prototype.buildMessage = function(result, name, args) {
|
||||||
|
var util = this.util;
|
||||||
|
|
||||||
if (result.pass) {
|
if (result.pass) {
|
||||||
return '';
|
return '';
|
||||||
} else if (this.filter && this.filter.buildFailureMessage) {
|
} else if (this.filter && this.filter.buildFailureMessage) {
|
||||||
return this.filter.buildFailureMessage(result, name, args, this.util);
|
return this.filter.buildFailureMessage(result, name, args, util, defaultMessage);
|
||||||
} else if (!result.message) {
|
|
||||||
args = args.slice();
|
|
||||||
args.unshift(false);
|
|
||||||
args.unshift(name);
|
|
||||||
return this.util.buildFailureMessage.apply(null, args);
|
|
||||||
} else if (j$.isFunction_(result.message)) {
|
|
||||||
return result.message();
|
|
||||||
} else {
|
} else {
|
||||||
return result.message;
|
return defaultMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
function defaultMessage() {
|
||||||
|
if (!result.message) {
|
||||||
|
args = args.slice();
|
||||||
|
args.unshift(false);
|
||||||
|
args.unshift(name);
|
||||||
|
return util.buildFailureMessage.apply(null, args);
|
||||||
|
} else if (j$.isFunction_(result.message)) {
|
||||||
|
return result.message();
|
||||||
|
} else {
|
||||||
|
return result.message;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -91,9 +99,16 @@ getJasmineRequireObj().Expectation = function(j$) {
|
|||||||
expect.not = Object.create(expect);
|
expect.not = Object.create(expect);
|
||||||
expect.not.filter = negatingFilter;
|
expect.not.filter = negatingFilter;
|
||||||
|
|
||||||
|
expect.withContext = function(message) {
|
||||||
|
var filteredExpect = Object.create(expect);
|
||||||
|
filteredExpect.filter = new ContextAddingFilter(message);
|
||||||
|
return filteredExpect;
|
||||||
|
};
|
||||||
|
|
||||||
return expect;
|
return expect;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var negatingFilter = {
|
var negatingFilter = {
|
||||||
selectComparisonFunc: function(matcher) {
|
selectComparisonFunc: function(matcher) {
|
||||||
function defaultNegativeCompare() {
|
function defaultNegativeCompare() {
|
||||||
@@ -120,5 +135,14 @@ getJasmineRequireObj().Expectation = function(j$) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function ContextAddingFilter(message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
ContextAddingFilter.prototype.buildFailureMessage = function(result, matcherName, args, util, getDefaultMessage) {
|
||||||
|
return this.message + ': ' + getDefaultMessage();
|
||||||
|
};
|
||||||
|
|
||||||
return Expectation;
|
return Expectation;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user