Skip to content

Commit 816fc95

Browse files
committed
Add tests for API
1 parent 0f7a8f6 commit 816fc95

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

test/app/inject/api.spec.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import 'babel-polyfill';
2+
import expect from 'expect';
3+
import { insertScript, listenMessage } from '../../utils/inject';
4+
import '../../../src/browser/extension/inject/pageScript';
5+
6+
describe('API', () => {
7+
it('should get window.devToolsExtension function', () => {
8+
expect(window.devToolsExtension).toBeA('function');
9+
});
10+
11+
it('should notify error', () => {
12+
const spy = expect.createSpy(() => {});
13+
window.devToolsExtension.notifyErrors(spy);
14+
insertScript('hi()');
15+
expect(spy).toHaveBeenCalled();
16+
});
17+
18+
it('should open monitor', async () => {
19+
let message = await listenMessage(() => {
20+
window.devToolsExtension.open();
21+
});
22+
expect(message).toEqual({ source: '@devtools-page', type: 'OPEN', position: 'right' });
23+
24+
message = await listenMessage(() => {
25+
window.devToolsExtension.open('left');
26+
});
27+
expect(message).toEqual({ source: '@devtools-page', type: 'OPEN', position: 'left' });
28+
});
29+
30+
it('should send message', async () => {
31+
let message = await listenMessage(() => {
32+
window.devToolsExtension.send('hi');
33+
});
34+
expect(message).toEqual({
35+
type: 'ACTION',
36+
action: { type: 'hi' },
37+
payload: undefined,
38+
id: undefined,
39+
name: '',
40+
source: '@devtools-page'
41+
});
42+
43+
message = await listenMessage(() => {
44+
window.devToolsExtension.send({ type: 'hi' }, { counter: 1 }, false, 1);
45+
});
46+
expect(message).toEqual({
47+
type: 'ACTION',
48+
action: { type: 'hi' },
49+
payload: { counter: 1 },
50+
id: 1,
51+
name: '',
52+
source: '@devtools-page'
53+
});
54+
55+
message = await listenMessage(() => {
56+
window.devToolsExtension.send({ type: 'hi' }, { counter: 1 }, true, 1);
57+
});
58+
expect(message).toEqual({
59+
type: 'ACTION',
60+
action: '{"type":"hi"}',
61+
payload: '{"counter":1}',
62+
id: 1,
63+
name: '',
64+
source: '@devtools-page'
65+
});
66+
67+
message = await listenMessage(() => {
68+
window.devToolsExtension.send(undefined, { counter: 1 }, false, 1);
69+
});
70+
expect(message).toEqual({
71+
type: 'STATE',
72+
payload: { counter: 1 },
73+
id: 1,
74+
name: '',
75+
source: '@devtools-page'
76+
});
77+
});
78+
});

test/utils/inject.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export function insertScript(str) {
2+
const s = window.document.createElement('script');
3+
s.appendChild(document.createTextNode(str));
4+
(document.head || document.documentElement).appendChild(s);
5+
}
6+
7+
export function listenMessage(f) {
8+
return new Promise(resolve => {
9+
const listener = event => {
10+
const message = event.data;
11+
window.removeEventListener('message', listener);
12+
resolve(message);
13+
};
14+
window.addEventListener('message', listener);
15+
f();
16+
});
17+
}

0 commit comments

Comments
 (0)