12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- var memoizer = require('./..');
- var assert = require('chai').assert;
- describe('lru-memoizer', function () {
- var loadTimes = 0, memoized;
- beforeEach(function () {
- loadTimes = 0;
- memoized = memoizer({
- load: function (a, b, callback) {
- loadTimes++;
- return setTimeout(function () {
- if (a === 0) {
- return callback(new Error('a cant be 0'));
- }
- callback(null, a+b);
- }, 10);
- },
- hash: function (a, b) {
- return a + '-' + b;
- },
- max: 10
- });
- });
- it('should cache the result of an async function', function (done) {
- memoized(1,2, function (err, result) {
- assert.isNull(err);
- assert.strictEqual(result, 3);
- assert.strictEqual(loadTimes, 1);
- memoized(1,2, function (err, result) {
- assert.isNull(err);
- assert.strictEqual(result, 3);
- assert.strictEqual(loadTimes, 1);
- done();
- });
- });
- });
- it('should use the hash function for keys', function (done) {
- memoized(1, 2, function () {
- memoized(2,3, function () {
- assert.includeMembers(memoized.keys(), ['1-2', '2-3']);
- done();
- });
- });
- });
- it('should not cache errored funcs', function (done) {
- memoized(0, 2, function (err) {
- assert.isNotNull(err);
- assert.notInclude(memoized.keys(), ['0-2']);
- done();
- });
- });
- it('should expose the hash function', function() {
- assert.equal(memoized.hash(0, 2), '0-2');
- });
- it('should expose the load function', function(done) {
- memoized.load(1, 2, (err, result) => {
- assert.equal(result, 3);
- done();
- });
- });
- it('should expose the max prop', function() {
- assert.equal(memoized.max, 10);
- });
- it('should allow to del a key', function(done) {
- memoized(1,2, () => {
- assert.strictEqual(loadTimes, 1);
- memoized.del(1,2);
- memoized(1,2, (err, result) => {
- assert.isNull(err);
- assert.strictEqual(result, 3);
- assert.strictEqual(loadTimes, 2);
- done();
- });
- });
- });
- });
|