teststate
TypeScript icon, indicating that this package has built-in type declarations

0.0.4 • Public • Published

teststate

Create immutable test state reinitialized after each test case with type inference.

Install

Using npm

npm install teststate

Using yarn

yarn add --dev teststate

How to use this library?

Use testState method when your test state is built from some complex types / factory methods.

// (1) import testState method from teststate module.
import { testState } from "teststate";

const EXPECTED_VALUE = "...";

describe("test fooMethod", () =>
  // (2) Declare state, pass a callback that builds state to be recreated between each tests.
  const state = testState(() => {
    const foo = fooFactory();
    return { foo };
  }, beforeEach);

  it("returns bar", () => {
    // (3) Use state inside test methods.
    const result = fooMethod(state.foo);

    expect(result).toBe(EXPECTED_VALUE);
  });
});

Use resetState method when your test state consist only primitive types and can be serialized.

// (1) import resetState method from teststate module.
import { resetState } from "teststate";

const EXPECTED_VALUE = "...";

describe("test fooMethod", () =>
  // (2) Declare state.
  const state = {
    foo: 1,
  }

  // (3) Call `resetState` in `beforeEach` method.
  beforeEach(() => resetState(state));

  it("returns bar", () => {
    // (4) Use state inside test methods.
    const result = fooMethod(state.foo);

    expect(result).toBe(EXPECTED_VALUE);
  });
});

## Why should I use this library?

Normally, when you define some state in `beforeEach` hook, you do:

```ts
describe("tests", () => {
  let foo: null | SomeType = null;

  beforeEach(() => {
    foo = createSomeTypeInstance();
  });

  it("passes the test", () => {
    // here foo can be SomeType | null
  });
});
describe("tests", () => {
  const state = testState(() => {
    return {
      foo: createSomeTypeInstance(),
    };
  }, beforeEach);

  it("passes the test", () => {
    // here state.foo must be SomeType
  });
});

With teststate, foo is always of type SomeType and can be accessed via state.foo.

Package Sidebar

Install

npm i teststate

Weekly Downloads

0

Version

0.0.4

License

MIT

Unpacked Size

21 kB

Total Files

23

Last publish

Collaborators

  • piotrszyma