diff --git a/tests/getStore.test.js b/tests/getStore.test.js index fd2b972..a8156a9 100644 --- a/tests/getStore.test.js +++ b/tests/getStore.test.js @@ -134,5 +134,5 @@ describe('getStore', () => { expect(screen.getByTestId('items').textContent).toContain('firstElement'); act(() => push(items, 'secondElement')); expect(screen.getByTestId('items').textContent).toContain('firstElement,secondElement'); - }) + }); }); diff --git a/tests/issue88.test.js b/tests/issue88.test.js new file mode 100644 index 0000000..a1e6d17 --- /dev/null +++ b/tests/issue88.test.js @@ -0,0 +1,65 @@ +import {render} from '@testing-library/react'; +import {useEffect, useState} from 'react'; + +import '@babel/polyfill'; + +import createStore from '../package/index'; + +describe('Issue 88', () => { + it('should subscribe even if initially not rendered', () => { + const track = jest.fn(); + + const initialStore = { + number: 0, + }; + const {useStore} = createStore(initialStore); + + const AA = () => { + const [number] = useStore.number(); + track(`AA number: ${number}`); + + return number; + }; + + const CC = () => { + const [number, setNumber] = useStore.number(); + track(`CC number: ${number}`); + if (!number) { + setNumber((prev) => prev + 1); + } + + return 'c'; + }; + + function App() { + const [show, setShow] = useState(false); + track(`App show: ${show}`); + useEffect(() => { + setShow(true); + }, []); + + return ( +