react-most-spec
v1.1.0
Published
a spec util for react-most
Downloads
18
Readme
- React Most Spec
Test utils for [[https://github.com/reactive-react/react-most][react-most]]
** install #+BEGIN_SRC sh npm install --save-dev react-most-spec #or yarn add --dev react-most-spec #+END_SRC
** Usage
*** sync mode async behavior is hardly predictable and not easy to reason, so if we can change it to sync behavior, it would be easier to write test.
To achieve that, we can simply replace most engine with a fake sync one. #+BEGIN_SRC js import {stateStreamOf, stateHistoryOf, intentStreamOf, intentHistoryOf, run, dispatch, Engine } from 'react-most-spec'; let counterWrapper = TestUtils.renderIntoDocument( ) let counter = TestUtils.findRenderedComponentWithType(counterWrapper, Counter) counter.actions.inc() counter.actions.inc() counter.actions.inc() expect(stateHistoryOf(counter)[2].count).toBe(3) #+END_SRC
*** async mode if you want to test with real engine, simply not parse the fake =Engine= from =react-most-spec= #+BEGIN_SRC js spyOn(console, 'error') let counterWrapper = TestUtils.renderIntoDocument( ) let counter = TestUtils.findRenderedComponentWithType(counterWrapper, Counter) return run(intentStreamOf(counter), dispatch([{type: 'exception'}], counter), [ state=>expect(console.error).toBeCalledWith('There is Error in your reducer:', 'exception in reducer', undefined) ]) #+END_SRC
=run= will return a promise, so simply return it and jasmine will wait for the promise resolved.
the 3 parameters are source stream:Stream, async actions:Promise, expects: Array[Function]
=Function= in =expects= should be in the same order of the value in source stream