Skip to content

Commit 8318a8a

Browse files
test program using dev tools: red on unmount
1 parent 5219f48 commit 8318a8a

1 file changed

Lines changed: 61 additions & 2 deletions

File tree

samples/src/Samples/ProgramSample.test.tsx

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { mount } from 'enzyme';
2-
import { Cmd, Dispatcher, Sub, Task } from 'tea-cup-core';
3-
import { extendJest, ProgramProps, updateUntilIdle } from 'react-tea-cup';
2+
import { Cmd, Dispatcher, noCmd, Port, Sub, Task } from 'tea-cup-core';
3+
import { DevTools, extendJest, Program, ProgramProps, updateUntilIdle } from 'react-tea-cup';
44
import React from 'react';
55

66
extendJest(expect);
@@ -38,3 +38,62 @@ describe('Test Program using updateUntilIdle()', () => {
3838
});
3939
});
4040
});
41+
42+
describe('Test Program using DevTools', () => {
43+
const init1: () => [ReadonlyArray<string>, Cmd<string>] = () => {
44+
return noCmd([]);
45+
};
46+
47+
const view1: (dispatch: Dispatcher<string>, model: ReadonlyArray<string>) => React.ReactNode = (
48+
dispatch: Dispatcher<string>,
49+
model: ReadonlyArray<string>,
50+
) => {
51+
return <div className={'history'}>{model.join(' ')}</div>;
52+
};
53+
54+
const update1: (msg: string, model: ReadonlyArray<string>) => [ReadonlyArray<string>, Cmd<string>] = (
55+
msg: string,
56+
model: ReadonlyArray<string>,
57+
) => {
58+
return noCmd(model.concat([msg]));
59+
};
60+
61+
const port1: Port<string> = new Port<string>();
62+
63+
it('stop dispatching when unmounted', () => {
64+
const devTools = DevTools.init(window);
65+
const props: ProgramProps<number, ReadonlyArray<string>> = {
66+
init: init1,
67+
view: view1,
68+
update: update1,
69+
subscriptions: () => port1.subscribe((msg) => msg),
70+
devTools,
71+
};
72+
73+
const wrapper = mount(<Program {...props} />);
74+
75+
expect(devTools.lastEvent().tag).toEqual('init');
76+
expect(devTools.lastEvent().model).toEqual([]);
77+
expect(devTools.lastModel()).toEqual([]);
78+
79+
port1.send('first');
80+
81+
expect(devTools.lastEvent().tag).toEqual('updated');
82+
expect(devTools.lastEvent().msg).toEqual('first');
83+
expect(devTools.lastModel()).toEqual(['first']);
84+
85+
port1.send('second');
86+
87+
expect(devTools.lastEvent().tag).toEqual('updated');
88+
expect(devTools.lastEvent().msg).toEqual('second');
89+
expect(devTools.lastModel()).toEqual(['first', 'second']);
90+
91+
wrapper.unmount();
92+
93+
port1.send('too-late');
94+
95+
expect(devTools.lastEvent().tag).toEqual('updated');
96+
expect(devTools.lastEvent().msg).toEqual('second');
97+
expect(devTools.lastModel()).toEqual(['first', 'second']);
98+
});
99+
});

0 commit comments

Comments
 (0)