1 | const DefaultStore = require('./index')
|
2 |
|
3 | describe('DefaultStore', () => {
|
4 | it('can be created with or without new', () => {
|
5 | let store = DefaultStore()
|
6 | expect(typeof store).toBe('object')
|
7 | store = new DefaultStore()
|
8 | expect(typeof store).toBe('object')
|
9 | })
|
10 |
|
11 | it('merges in state using `setState`', () => {
|
12 | const store = DefaultStore()
|
13 | expect(store.getState()).toEqual({})
|
14 |
|
15 | store.setState({
|
16 | a: 1,
|
17 | b: 2
|
18 | })
|
19 | expect(store.getState()).toEqual({ a: 1, b: 2 })
|
20 |
|
21 | store.setState({ b: 3 })
|
22 | expect(store.getState()).toEqual({ a: 1, b: 3 })
|
23 | })
|
24 |
|
25 | it('notifies subscriptions when state changes', () => {
|
26 | let expected = []
|
27 | let calls = 0
|
28 | function listener (prevState, nextState, patch) {
|
29 | calls++
|
30 | expect([prevState, nextState, patch]).toEqual(expected)
|
31 | }
|
32 |
|
33 | const store = DefaultStore()
|
34 | store.subscribe(listener)
|
35 |
|
36 | expected = [{}, { a: 1, b: 2 }, { a: 1, b: 2 }]
|
37 | store.setState({
|
38 | a: 1,
|
39 | b: 2
|
40 | })
|
41 |
|
42 | expected = [{ a: 1, b: 2 }, { a: 1, b: 3 }, { b: 3 }]
|
43 | store.setState({ b: 3 })
|
44 |
|
45 | expect(calls).toBe(2)
|
46 | })
|
47 | })
|