injest

Makes your Jest tests more digestible


Keywords
jest, test, utilities
License
MIT
Install
npm install injest@0.1.3

Documentation

Injest Build Status

Makes your Jest tests more digestible.

Installation

npm i jest injest --save-dev

Usage

Injest provides various helpers to write smaller and quickers tests for your application. Helpers come in two flavors: snapshots and tests.

Assertions

Assertions helps you test things against something within your tests, by default a Jest snapshot but you can usually provide an explicit result to test against as last argument:

import { assert, component, reducer, saga } from "injest/assertions";

test("my test", () => {
    // Testing something against a snapshot
    assert(someFunction(argument));

    // Testing something against a result
    assert(someFunction(argument), "foobar");

    // Testing a component against a snapshot
    component(<Icon />);

    // Testing a component more in depth
    const { tree, actual } = assert(<Icon />); // Assert initial output
    tree.props.onClick();
    assert(actual); // Trigger a prop and re-assert the output

    // Testing a reducer against a snapshot
    reducer(someReducer, stateBefore, { type: "SOME_ACTION" });

    // Testing a reducer against a result
    reducer(someReducer, stateBefore, { type: "SOME_ACTION" }, stateAfter);

    // Testing a saga against a snapshot
    saga(onLoggedIn({ id: 1 }));

    // Testing a saga against a result
    saga(onLoggedIn({ id: 1 }), [
        {
            action: call(::UserManager.login, 1),
            response: { ...dummyUser },
        },
        {
            action: put(isLoggedIn()),
        },
    ]);
});

Tests

Tests are the same functions but wrapped in a way that let your write tests in a smaller and cleaner manner. Underneath they call test with the provided description and then call the function above with the rest of the arguments.

import { assert, component, reducer, saga } from "injest/tests";

assert("can select something", getUser(state));
component("can be rendered", <Icon />);
reducer("can process some action", someReducer, stateBefore, {
    type: "SOME_ACTION",
});
saga("can log user in", onLoggedIn());

As reducers usually have a lot of tests and repeatedly passing the reducer could be cumbersome, a reducer test factory is provided:

import { reducerTestFactory } from "injest/tests";

const reducer = reducerTestFactory(myReducer);

reducer("can process foo", stateBefore, { type: "FOO" });
reducer("can process bar", stateBefore, { type: "BAR" });
reducer("can process multiple scenarios", assert => {
    assert(stateBefore, { type: "FOO" }, stateAfter);
    assert(stateBefore, { type: "BAR" });
});

Testing

npm test
npm run lint