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
|
import PropTypes from 'prop-types';
import { observable } from 'mobx';
import FeatureStore from '../../../src/features/utils/FeatureStore';
import { createActionsFromDefinitions } from '../../../src/actions/lib/actions';
import { createActionBindings } from '../../../src/features/utils/ActionBinding';
import { createReactions } from '../../../src/stores/lib/Reaction';
const actions = createActionsFromDefinitions(
{
countUp: {},
},
PropTypes.checkPropTypes,
);
class TestFeatureStore extends FeatureStore {
@observable count = 0;
reactionInvokedCount = 0;
start() {
this._registerActions(
createActionBindings([[actions.countUp, this._countUp]]),
);
this._registerReactions(createReactions([this._countReaction]));
}
_countUp = () => {
this.count += 1;
};
_countReaction = () => {
this.reactionInvokedCount += 1;
};
}
describe('FeatureStore', () => {
let store = null;
beforeEach(() => {
store = new TestFeatureStore();
});
describe('registering actions', () => {
it('starts the actions', () => {
store.start();
actions.countUp();
expect(store.count).toBe(1);
});
it('starts the reactions', () => {
store.start();
actions.countUp();
expect(store.reactionInvokedCount).toBe(1);
});
});
describe('stopping the store', () => {
it('stops the actions', () => {
store.start();
actions.countUp();
store.stop();
actions.countUp();
expect(store.count).toBe(1);
});
it('stops the reactions', () => {
store.start();
actions.countUp();
store.stop();
store.count += 1;
expect(store.reactionInvokedCount).toBe(1);
});
});
describe('toggling the store', () => {
it('restarts the actions correctly', () => {
store.start();
actions.countUp();
store.stop();
actions.countUp();
store.start();
actions.countUp();
expect(store.count).toBe(2);
});
it('restarts the reactions correctly', () => {
store.start();
actions.countUp();
store.stop();
actions.countUp();
store.start();
actions.countUp();
expect(store.count).toBe(2);
});
});
});
|