react-most-spec

a spec util for react-most

Usage no npm install needed!

<script type="module">
  import reactMostSpec from 'https://cdn.skypack.dev/react-most-spec';
</script>

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