Simon Hunt

GUI - Angular:: Example unit test for custom filter.

Change-Id: I82863bebe2f9e89097f2d2cedcc866cb884e304d
// ch09-01-time-ago.js
angular.module('filterApp', [])
.filter('timeAgo', [function () {
var _m = 1000 * 60,
_h = _m * 60,
_d = _h * 24,
_mon = _d * 30;
return function (ts, ignoreSecs) {
var showSecs = !ignoreSecs,
now = new Date().getTime(),
diff = now - ts;
if (diff < _m && showSecs) {
return 'seconds ago';
} else if (diff < _h) {
return 'minutes ago';
} else if (diff < _d) {
return 'hours ago';
} else if (diff < _mon) {
return 'days ago';
} else {
return 'months ago';
}
}
}]);
// ch09-01-time-agoSpec.js
describe('timeAgo Filter', function () {
beforeEach(module('filterApp'));
var filter;
beforeEach(inject(function (timeAgoFilter) {
filter = timeAgoFilter;
}));
it('should respond based on timestamp', function() {
// The presence of new Date().getTime() makes it slightly
// hard to unit test deterministically.
// Ideally, we would inject a dateProvider into the timeAgo
// filter, but we are trying to keep it simple for now.
// So, we assume that our tests are fast enough to execute
// in mere milliseconds.
var t = new Date().getTime();
t -= 10000;
expect(filter(t)).toEqual('seconds ago');
expect(filter(t, true)).toEqual('minutes ago');
var fmin = t - 1000 * 60;
expect(filter(fmin)).toEqual('minutes ago');
expect(filter(fmin, true)).toEqual('minutes ago');
var fhour = t - 1000 * 60 * 68;
expect(filter(fhour)).toEqual('hours ago');
expect(filter(fhour, true)).toEqual('hours ago');
var fday = t - 1000 * 60 * 60 * 26;
expect(filter(fday)).toEqual('days ago');
expect(filter(fday, true)).toEqual('days ago');
var fmon = t - 1000 * 60 * 60 * 24 * 34;
expect(filter(fmon)).toEqual('months ago');
expect(filter(fmon, true)).toEqual('months ago');
});
});