Skip to content

Instantly share code, notes, and snippets.

@qmmr
Created April 6, 2016 15:51
Show Gist options
  • Save qmmr/8fb53dd54e8a7c15509fe982152e3077 to your computer and use it in GitHub Desktop.
Save qmmr/8fb53dd54e8a7c15509fe982152e3077 to your computer and use it in GitHub Desktop.
Redux reduceReducers in ES5
var reduceReducers = function () {
var reducers = [].slice.call(arguments);
return function (previous, current) {
return reducers.reduce(function (accu, curr) {
return curr(accu, current);
}, previous);
};
};
var reduceReducers = require('./reduceReducers');
describe('reduceReducers', function () {
it('combines multiple reducers into a single reducer', function () {
var reducerA = function (prev, curr) {
return Object.assign({}, prev, { A: prev.A + curr });
};
var reducerB = function (prev, curr) {
return Object.assign({}, prev, { B: prev.B * curr });
};
var reducer = reduceReducers(reducerA, reducerB);
expect(reducer({ A: 1, B: 2 }, 3)).to.deep.equal({ A: 4, B: 6 });
expect(reducer({ A: 5, B: 8 }, 13)).to.deep.equal({ A: 18, B: 104 });
});
it('chains multiple reducers into a single reducer', function () {
var addReducer = function (prev, curr) {
return Object.assign({}, prev, { A: prev.A + curr });
};
var multReducer = function (prev, curr) {
return Object.assign({}, prev, { A: prev.A * curr });
};
var reducerAddMult = reduceReducers(addReducer, multReducer);
var reducerMultAdd = reduceReducers(multReducer, addReducer);
expect(reducerAddMult({ A: 1, B: 2 }, 3)).to.deep.equal({ A: 12, B: 2 });
expect(reducerMultAdd({ A: 1, B: 2 }, 3)).to.deep.equal({ A: 6, B: 2 });
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment