Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@asaayers/redux-saga-tester

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@asaayers/redux-saga-tester

Test your sagas by intercepting effects

  • 0.1.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

@AsaAyers/redux-saga-tester

Project Status: Experimental

Expect every 0.x release to break the API. Nothing is settled.

I am releasing this under my namespace because 3LOK already has a redux-saga-tester. When the API settles and I want to release a 1.0.0, I'd like to have a different name.

Project Goals

  • Tests should not be tightly coupled to implementation
  • Tests should read in the same order as the saga
    • I think this makes them easier to read and understand

Example

For this example I created a toy saga based on 3LOK's comment.

function* addSaga() {
    const a = yield select(selectA)
    const b = yield select(selectB)

    const total = yield call(sum, a, b)

    yield put({
        type: "RESULT",
        payload: total
    })
}

I want to verify that this saga uses sum() to add store.a and store.b and updates store.result with the total. By default the tester doesn't tell you about yield select or yield put. they happen automatically.

import { addSaga, sum, reducer, selectResult, selectA, selectB } from "./add-saga.js"
test("add-saga", () => {
    const tester = SagaTester({
        initialState: {
            a: 2,
            b: 3,
        },
        reducer,
    })

    tester.testAgainst(addSaga, function* ({ getState }) {
        let actual

        // yield gives you the next effect from your saga that you want to test.
        // This didn't care about the selectors, they execute normally.
        actual = yield
        expect(actual).toEqual(call(sum, 2, 3))
        const callSumResult = 5

        // You need to yield a result back to the saga to continue and pick up
        // the next significant effect.
        actual = yield callSumResult
        // END is a special value automatically emitted when/if your saga ends
        expect(actual).toBe(END)

        // Instead of verifying the action was fired, now verify the state.
        actual = selectResult(getState())
        expect(actual).toBe(callSumResult)
    })
})

This test and some other variations are available in src/tests/add-saga.test.js.

FAQs

Package last updated on 16 Sep 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc