Write AVA tests for redux pretty quickly
JavaScript
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test test: add basic coverage for reducerTest (#18) Jul 8, 2017
.editorconfig
.gitattributes chore: Initialize project Feb 28, 2016
.gitignore chore: Initialize project Feb 28, 2016
.travis.yml
index.js
license
package.json
readme.md

readme.md

redux-ava

Write AVA tests for redux pretty quickly

Build Status

Install

npm install --save-dev redux-ava

API

actionTest(actionCreator, data, type, [description])

actionCreator

Type: function

The action creator you want to test

data

Type: anything or null

The data your action creator function takes in. If it doesn't take any data, use null.

type

Type: object

The type you expect your action creator to return.

description

Type: string

Optional test description.

reducerTest(reducer, stateBefore, action, stateAfter, [description])

reducer

Type: function

The reducer you want to test.

stateBefore

Type: object

The state you expect before the reducer is run.

action

Type: object

The action you want to give to the reducer. This is different from actionTest in that you pass an action object, not an action creator function. You may use a call to your action creator function as an argument provided it returns an action object. See the examples below.

stateAfter

Type: object

The state you expect after the reducer is run.

description

Type: string

Optional test description.

Examples

This is an AVA port of tape-redux. For more documentation, check there.

Let's test an action creator:

import test from 'ava'
import {actionTest} from 'redux-ava'

import {openMenu, getUser} from '../actions'

// Without parameter
test('openMenu action', actionTest(openMenu, {type: 'OPEN_MENU'}))

// With single parameter
test('getUser action', actionTest(getUser, 1, {type: 'GET_USER', id: 1}))

// With multiple parameters
test('showArtist action', actionTest(
  showArtist, 'bob-dylan', 'Bob Dylan',
  {type: 'SHOW_ARTIST', slug: 'bob-dylan', name: 'Bob Dylan'}
))

And now a reducer:

import test from 'ava'
import {reducerTest} from 'redux-ava'

import app from '../reducers'
import {openMenu, getUser} from '../actions'

test('app reducer handles openMenu', reducerTest(
  app,
  {menuOpen: false, user: null},
  openMenu(),
  {menuOpen: true, user: null}
))

test('app reducer handles getUser', reducerTest(
  app,
  {menuOpen: false, user: null},
  getUser(1),
  {menuOpen: false, user: 1}
))

License

MIT © Juan Soto