Skip to content

Commit 3ee32d3

Browse files
committed
Add tests for monitoring with redux enhancer
1 parent d42decc commit 3ee32d3

File tree

4 files changed

+124
-8
lines changed

4 files changed

+124
-8
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"test:app": "cross-env BABEL_ENV=test mocha --require test/app/setup.js --recursive test/app",
1717
"test:chrome": "gulp test:chrome",
1818
"test:electron": "gulp test:electron && rm -rf test/electron/tmp",
19-
"test": "npm run build:extension && npm run test:app && npm run test:chrome && npm run test:electron"
19+
"test": "npm run test:app && npm run build:extension && npm run test:chrome && npm run test:electron"
2020
},
2121
"repository": {
2222
"type": "git",

src/browser/extension/utils/contentScriptMsg.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function sendMessage(action, state, shouldStringify, id) {
4141
}
4242

4343
function handleMessages(event) {
44-
if (!event || event.source !== window) return;
44+
if (process.env.BABEL_ENV !== 'test' && (!event || event.source !== window)) return;
4545
const message = event.data;
4646
if (!message || message.source !== '@devtools-extension') return;
4747
Object.keys(listeners).forEach(id => {

test/app/inject/enhancer.spec.js

Lines changed: 121 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,129 @@ describe('Redux enhancer', () => {
1919
expect(window.store).toBeA('object');
2020
});
2121
expect(message.type).toBe('INIT_INSTANCE');
22+
expect(window.store.getState()).toBe(0);
2223
});
2324

24-
it('should perform actions', () => {
25-
expect(window.store.getState()).toBe(0);
26-
window.store.dispatch({ type: 'INCREMENT' });
27-
expect(window.store.getState()).toBe(1);
28-
window.store.dispatch({ type: 'INCREMENT' });
25+
it('should start monitoring', async () => {
26+
let message = await listenMessage(() => {
27+
window.postMessage({ type: 'START', source: '@devtools-extension' }, '*');
28+
});
29+
expect(message.type).toBe('START');
30+
31+
message = await listenMessage();
32+
expect(message.type).toBe('STATE');
33+
expect(message.payload.actionsById[0].action.type).toBe('@@INIT');
34+
expect(message.payload.computedStates[0].state).toBe(0);
35+
});
36+
37+
it('should perform actions', async () => {
38+
let message = await listenMessage(() => {
39+
window.store.dispatch({ type: 'INCREMENT' });
40+
expect(window.store.getState()).toBe(1);
41+
});
42+
expect(message.type).toBe('ACTION');
43+
expect(message.action.action.type).toBe('INCREMENT');
44+
expect(message.payload).toBe(1);
45+
46+
message = await listenMessage(() => {
47+
window.store.dispatch({ type: 'INCREMENT' });
48+
expect(window.store.getState()).toBe(2);
49+
});
50+
expect(message.type).toBe('ACTION');
51+
expect(message.action.action.type).toBe('INCREMENT');
52+
expect(message.payload).toBe(2);
53+
});
54+
55+
it('should dispatch actions remotely', async () => {
56+
let message = await listenMessage(() => {
57+
window.postMessage({
58+
type: 'ACTION',
59+
payload: { type: 'INCREMENT' },
60+
source: '@devtools-extension'
61+
}, '*');
62+
});
63+
expect(message.type).toBe('ACTION');
64+
65+
message = await listenMessage();
66+
expect(message.type).toBe('ACTION');
67+
expect(message.action.action.type).toBe('INCREMENT');
68+
expect(message.payload).toBe(3);
69+
});
70+
71+
it('should cancel (toggle) action', async () => {
72+
let message = await listenMessage(() => {
73+
window.postMessage({
74+
type: 'DISPATCH',
75+
payload: {type: 'TOGGLE_ACTION', id: 1},
76+
source: '@devtools-extension'
77+
}, '*');
78+
});
79+
expect(message.type).toBe('DISPATCH');
80+
81+
message = await listenMessage();
82+
expect(message.type).toBe('STATE');
83+
expect(message.payload.computedStates[message.payload.computedStates.length - 1].state).toBe(2);
84+
expect(window.store.getState()).toBe(2);
85+
86+
message = await listenMessage(() => {
87+
window.postMessage({
88+
type: 'DISPATCH',
89+
payload: {type: 'TOGGLE_ACTION', id: 1},
90+
source: '@devtools-extension'
91+
}, '*');
92+
});
93+
expect(message.type).toBe('DISPATCH');
94+
95+
message = await listenMessage();
96+
expect(message.type).toBe('STATE');
97+
expect(window.store.getState()).toBe(3);
98+
});
99+
100+
it('should move back and forward (time travel)', async () => {
101+
let message = await listenMessage(() => {
102+
window.postMessage({
103+
type: 'DISPATCH',
104+
payload: {type: 'JUMP_TO_STATE', index: 2},
105+
source: '@devtools-extension'
106+
}, '*');
107+
});
108+
expect(message.type).toBe('DISPATCH');
109+
expect(window.store.getState()).toBe(2);
110+
111+
message = await listenMessage(() => {
112+
window.postMessage({
113+
type: 'DISPATCH',
114+
payload: {type: 'JUMP_TO_STATE', index: 3},
115+
source: '@devtools-extension'
116+
}, '*');
117+
});
118+
expect(message.type).toBe('DISPATCH');
119+
expect(window.store.getState()).toBe(3);
120+
});
121+
122+
it('should import state history', async () => {
123+
let message = await listenMessage(() => {
124+
window.postMessage({
125+
type: 'IMPORT',
126+
state: JSON.stringify({
127+
monitorState: {},
128+
actionsById: {
129+
'0': { type: 'PERFORM_ACTION', action: { type: '@@INIT' } },
130+
'1': { type: 'PERFORM_ACTION', action: { type: 'INCREMENT' } },
131+
'2': { type: 'PERFORM_ACTION', action: { type: 'INCREMENT' } }
132+
},
133+
nextActionId: 3,
134+
stagedActionIds: [ 0, 1, 2 ],
135+
skippedActionIds: [],
136+
currentStateIndex: 2,
137+
computedStates: [ { state: 0 }, { state: 1 }, { state: 2 } ]
138+
}),
139+
source: '@devtools-extension'
140+
}, '*');
141+
});
142+
expect(message.type).toBe('IMPORT');
143+
message = await listenMessage();
144+
expect(message.type).toBe('STATE');
29145
expect(window.store.getState()).toBe(2);
30146
});
31147

test/utils/inject.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ export function listenMessage(f) {
1212
resolve(message);
1313
};
1414
window.addEventListener('message', listener);
15-
f();
15+
if (f) f();
1616
});
1717
}

0 commit comments

Comments
 (0)