Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/conorhastings/redux-test-recorder
a redux middleware to automatically generate tests for reducers through ui interaction
https://github.com/conorhastings/redux-test-recorder
Last synced: 20 days ago
JSON representation
a redux middleware to automatically generate tests for reducers through ui interaction
- Host: GitHub
- URL: https://github.com/conorhastings/redux-test-recorder
- Owner: conorhastings
- License: mit
- Created: 2016-01-10T21:26:08.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-10-11T13:53:26.000Z (about 8 years ago)
- Last Synced: 2024-10-23T01:28:02.925Z (about 2 months ago)
- Language: JavaScript
- Homepage: http://conor.rodeo/redux-test-recorder/demo/
- Size: 1.6 MB
- Stars: 495
- Watchers: 10
- Forks: 20
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-react-components-all - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Uncategorized / Uncategorized)
- awesome-react-components - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Dev Tools / Test)
- awesome-react - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. ![](https://img.shields.io/github/stars/tcoopman/react-flexbox.svg?style=social&label=Star) (Dev Tools / Test)
- awesome-list - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Dev Tools / Test)
- awesome-react-components - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Dev Tools / Test)
- awesome-react-components - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Dev Tools / Test)
- awesome-react-components - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Dev Tools / Test)
- fucking-awesome-react-components - redux-test-recorder - A redux middleware to automatically generate tests for reducers through ui interaction. (Dev Tools / Test)
- awesome-ava - redux-test-recorder - Generate AVA tests for Redux reducers in a React app. (Packages)
- awesome-redux - redux-test-recorder - Redux middleware to automatically generate tests for reducers through ui interaction. (React Integration / Side Effects)
README
## Redux Test Recorder
**NOTE YOUR STATE TREE MUST BE SERIALIZABLE**
Redux test recorder is a redux middleware for automatically generating tests for your reducers based on the actions in your app. Currently I've written redux-test-recorder-react a component to provide a gui for recording tests in react but I'm hopeful recording components for other frameworks can be created in the future.
[![Build Status](https://travis-ci.org/conorhastings/redux-test-recorder.svg?branch=master)](https://travis-ci.org/conorhastings/redux-test-recorder)
- Click here for a demo.
- And here for another demo with TodoMVC
- And here to watch my lightning talk on the project at React EuropeAlso take a look at our latest build which currently runs a test generated using this module by taking advantage of the `eval` command. For a better idea of what is going on, you can take a look at the test file here.
### Install
`npm install redux-test-recorder --save-dev`
### Use
First set up your store utilizing the exported middleware from `redux-test-recorder`. Export the props included with `redux-test-recorder` at this time as well.
```js
import reduxRecord from 'redux-test-recorder';
const reducer = (state = initState, { type, payload }) => {
let newState;
switch (type) {
case 'INCREMENT':
newState = state + 1;
break;
case 'DECREMENT':
newState = state - 1;
break;
default:
newState = state;
}
return newState;
}const record = reduxRecord({reducer});
export const store = createStore(reducer, applyMiddleware(record.middleware));
export const recordProps = record.props;
```Then, if you are using with React you can install redux-test-recorder-react and import the recordProps exported by the instantiation of the middleware and pass those into the record component.
```js
import {store, recordProps } from './store';
import TestRecorder from 'redux-test-recorder-react';
const Counter = ({count, dispatch}) => {
return (
dispatch(increment())}>+
{count}
dispatch(decrement())}>-
);
}const ConnectedCounter = connect(state => {
return {count: state};
})(Counter);
const Root = () => {
return (
;
};
```
This will allow you to generate tests on your reducer with a record button in the bottom right corner.### Args
* **reducer** - the root reducer of your redux app, used in the generated test.
* **includeReducer** - a boolean value, if true, a stringified version of your reducer will be incuded in your generated test, if false, a note to import reducer for testing will be added. defaults to false. Useful when used to generate actual tests so you can test updated functionality.
* **stateKey(*optional*)** - if instead of recording the whole state you only want to record a specific piece, pass that here (useful with `actionSubset` prop explained next). To get to a -nth level child use dots, as in: `api.login.errors`.
* **actionSubset(*optional*)** - allows you to record against a subset of actions instead of all actions. Useful combined with `stateKey` to test a single reducer.
* **equality(*optional*)** - a function used to determine if the reducer returned correct state. Receives result of the reducer call and nextState returned during the flow of the application (**note, this api is in flux**). deafults to `===`. This argument can *also* be a *string*. This is useful if you want to call a function you will include in your test file, since calling external functions will not properly stringify that external function.
* **imports(*optional*)**` - a string argument where you can pass in other modules that you would like included iny our test file. Useful if you want to reference external functions in your equality check.
* **testLib(*optional*)** - defaults to `tape`. Currently supports `tape`, `ava`, and `mocha`, `jest`, and `redux-ava`. You can also optionally supply a function to this argument to generate your own tests. Will receive `state, actions, imports, reducer, equalityFunction` as arguments and expects return type to be a string containing your test contents.
* **numTestsToSave(*optional*, defaults to 5)** - number of previous tests that will be accessible in the panel when tests are being displayed. Higher number = newer.### Create Your Own Testing Interface
If you're not satisfied with the built in testing interface or would like to experiment with something different, it's relatively straightforward. The return of the exported function is an object with two keys `middleware` and `props`. The `middleware` key contains, well, the middleware, `props` contains information for accessing the current state of the tests. These include `startRecord`, `stopRecord` , which are functions that start and stop test recording. `createNewTest` which creates and then returns a new test, `hideTest` , which resets all values to initial value, and most importantly `listen` , a function that takes a function and calls `listeners` any time any values related to recording status or generated tests is changed. More documentation on this coming soon.
You can take a look at what creating your own interface looks like here - here for what this looks like for the tape implementation.