-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreducers-test.js
110 lines (99 loc) · 2.52 KB
/
reducers-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import expect from 'expect';
import React from 'react';
import dva from '../src/index';
describe('reducers', () => {
it('type error', () => {
const app = dva();
expect(_ => {
app.model({
namespace: '_',
reducers: [{}, () => {}],
});
}).toNotThrow();
expect(_ => {
app.model({
namespace: '_',
reducers: {},
});
}).toNotThrow();
expect(_ => {
app.model({
namespace: '_',
reducers: '_',
});
}).toThrow(/app.model: reducers should be Object or array/);
expect(_ => {
app.model({
namespace: '_',
reducers: [],
});
}).toThrow(/app.model: reducers with array should be app.model\({ reducers: \[object, function\] }\)/);
});
it('enhancer', () => {
function enhancer(reducer) {
return (state, action) => {
if (action.type === 'square') {
return state * state;
}
return reducer(state, action);
};
}
const app = dva();
app.model({
namespace: 'count',
state: 3,
reducers: [{
add(state, { payload }) { return state + (payload || 1); },
}, enhancer],
});
app.router(({ history }) => <div />);
app.start();
app._store.dispatch({ type: 'square' });
app._store.dispatch({ type: 'count/add' });
expect(app._store.getState().count).toEqual(10);
});
it('extraReducers', () => {
const reducers = {
count: (state, { type }) => {
if (type === 'add') {
return state + 1;
}
// default state
return 0;
}
};
const app = dva({
extraReducers: reducers,
});
app.router(_ => <div />);
app.start();
expect(app._store.getState().count).toEqual(0);
app._store.dispatch({ type: 'add' });
expect(app._store.getState().count).toEqual(1);
});
it('extraReducers: throw error if conflicts', () => {
const app = dva({
extraReducers: { routing: function () {} }
});
app.router(_ => <div />);
expect(() => {
app.start();
}).toThrow(/app.start: extraReducers is conflict with other reducers/);
});
it('onReducer', () => {
const undo = r => state => {
const newState = r(state);
return { present: newState, routing: newState.routing };
};
const app = dva({
onReducer: undo,
});
app.model({
namespace: 'count',
state: 0,
});
app.router(({ history }) => <div />);
app.start();
expect(app._store.getState().present.count).toEqual(0);
});
});