teststate
v0.0.4
Published
Create immutable test state before each test case.
Maintainers
Readme
teststate
Create immutable test state reinitialized after each test case with type inference.
Install
Using npm
npm install teststateUsing yarn
yarn add --dev teststateHow 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.
