redux-observable-sans
Version:
Use redux without any boilerplate
101 lines (77 loc) • 3.81 kB
JavaScript
;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _reduxObservable = require('redux-observable');
var _rxjs = require('rxjs');
var _index = require('../index');
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
describe('socketEpic', function () {
var me = { token: 'key', name: 'AB Normal', userId: '3f43f' };
var state$ = { value: { me: me } };
var subject = void 0;
var action$ = void 0;
var emittedActions = void 0;
var socketEvents = void 0;
var socket = {
emit: function emit(type, msg) {
return socketEvents.push([type, msg]);
}
};
var pushAction = function pushAction(emittedAction) {
return emittedActions.push(emittedAction);
};
var cA = (0, _index.commandAction)(function (i) {
return i;
})('doSomething')({ data: 'whatevs' });
var qA = (0, _index.queryAction)(function (i) {
return i;
})('getSomething')({ payload: 'whatevs' });
beforeEach(function () {
subject = new _rxjs.Subject();
action$ = new _reduxObservable.ActionsObservable(subject);
emittedActions = [];
socketEvents = [];
});
it('should return action and emit command event', function () {
var result$ = _reduxObservable.combineEpics.apply(undefined, _toConsumableArray((0, _index.socketEpics)(socket)))(action$, state$);
result$.subscribe(pushAction, console.error, console.error);
subject.next(cA);
subject.next(qA);
expect(emittedActions).toEqual([_extends({}, cA.payload, { type: 'DO_SOMETHING' }), _extends({}, qA.payload, { type: 'GET_SOMETHING' })]);
expect(socketEvents).toEqual([['command', _extends({}, cA.payload, { type: 'doSomething' })], ['query', _extends({}, qA.payload, { type: 'getSomething' })]]);
});
it('should add token only to socket msg', function () {
var auth = function auth(state$) {
return { token: state$.value.me.token, userId: state$.value.me.userId };
};
var result$ = _reduxObservable.combineEpics.apply(undefined, _toConsumableArray((0, _index.socketEpics)(socket, auth)))(action$, state$);
result$.subscribe(pushAction, console.error, console.error);
subject.next(cA);
subject.next(qA);
expect(emittedActions).toEqual([_extends({}, cA.payload, { type: 'DO_SOMETHING' }), _extends({}, qA.payload, { type: 'GET_SOMETHING' })]);
expect(socketEvents).toEqual([['command', _extends({}, cA.payload, { type: 'doSomething', token: me.token, userId: me.userId })], ['query', _extends({}, qA.payload, { type: 'getSomething', token: me.token, userId: me.userId })]]);
});
});
describe('toAction', function () {
it('should dispatch constant-case', function () {
var dispatch = function dispatch(action) {
expect(action).toEqual({
type: 'DID_SOMETHING',
data: { what: 'evs' }
});
};
(0, _index.toAction)(dispatch)({ type: 'DidSomething', data: { what: 'evs' } });
});
it('should dispatch _FAILURE', function () {
var expectedActions = [{ type: 'COMMAND_REJECTED', payload: { type: 'DidSomething', data: { what: 'evs' } } }, { type: 'DID_SOMETHING_FAILURE', data: { what: 'evs' } }];
var count = 0;
var dispatch = function dispatch(action) {
expect(action).toEqual(expectedActions[count]);
count++;
};
(0, _index.toAction)(dispatch)({
type: 'CommandRejected',
payload: { type: 'DidSomething', data: { what: 'evs' } }
});
expect(count).toEqual(expectedActions.length);
});
});