Add toHaveBeenCalledBefore matcher
This matcher makes sure the 'actual' spy is called before the 'expected' spy. This code has been written in cooperation with Benjamin Van Ryseghem.
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
getJasmineRequireObj().Spy = function (j$) {
|
||||
|
||||
var nextOrder = (function() {
|
||||
var order = 0;
|
||||
|
||||
return function() {
|
||||
return order++;
|
||||
};
|
||||
})();
|
||||
|
||||
function Spy(name, originalFn) {
|
||||
var args = buildArgs(),
|
||||
/*`eval` is the only option to preserve both this and context:
|
||||
@@ -21,6 +29,7 @@ getJasmineRequireObj().Spy = function (j$) {
|
||||
spy = function () {
|
||||
var callData = {
|
||||
object: this,
|
||||
invocationOrder: nextOrder(),
|
||||
args: Array.prototype.slice.apply(arguments)
|
||||
};
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
|
||||
'toContain',
|
||||
'toEqual',
|
||||
'toHaveBeenCalled',
|
||||
'toHaveBeenCalledBefore',
|
||||
'toHaveBeenCalledWith',
|
||||
'toHaveBeenCalledTimes',
|
||||
'toMatch',
|
||||
|
||||
40
src/core/matchers/toHaveBeenCalledBefore.js
Normal file
40
src/core/matchers/toHaveBeenCalledBefore.js
Normal file
@@ -0,0 +1,40 @@
|
||||
getJasmineRequireObj().toHaveBeenCalledBefore = function(j$) {
|
||||
|
||||
var getErrorMsg = j$.formatErrorMsg('<toHaveBeenCalledBefore>', 'expect(<spyObj>).toHaveBeenCalledBefore(<spyObj>)');
|
||||
|
||||
function toHaveBeenCalledBefore() {
|
||||
return {
|
||||
compare: function(firstSpy, latterSpy) {
|
||||
if (!j$.isSpy(firstSpy)) {
|
||||
throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(firstSpy) + '.'));
|
||||
}
|
||||
if (!j$.isSpy(latterSpy)) {
|
||||
throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(latterSpy) + '.'));
|
||||
}
|
||||
|
||||
var result = { pass: false };
|
||||
|
||||
if (!firstSpy.calls.count()) {
|
||||
result.message = 'Expected spy ' + firstSpy.and.identity() + ' to have been called.';
|
||||
return result;
|
||||
}
|
||||
if (!latterSpy.calls.count()) {
|
||||
result.message = 'Expected spy ' + latterSpy.and.identity() + ' to have been called.';
|
||||
return result;
|
||||
}
|
||||
|
||||
result.pass = firstSpy.calls.mostRecent().invocationOrder < latterSpy.calls.mostRecent().invocationOrder;
|
||||
|
||||
if (result.pass) {
|
||||
result.message = 'Expected ' + firstSpy.and.identity() + ' to not have been called before ' + latterSpy.and.identity() + ', but it was';
|
||||
} else {
|
||||
result.message = 'Expected ' + firstSpy.and.identity() + ' to have been called before ' + latterSpy.and.identity();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return toHaveBeenCalledBefore;
|
||||
};
|
||||
Reference in New Issue
Block a user