8000 GitHub - tstyche/tstyche: Everything You Need for Type Testing.
[go: up one dir, main page]

Skip to content

Everything You Need for Type Testing.

License

Notifications You must be signed in to change notification settings

tstyche/tstyche

TSTyche

version license install-size coverage

Everything You Need for Type Testing.


TSTyche is a type testing tool for TypeScript. It ships with describe() and test() helpers, expect style assertions and a mighty test runner.

Helpers

If you are used to testing, a type test should look familiar:

import { expect, test } from "tstyche";

function isSameLength<T extends { length: number }>(a: T, b: T) {
  return a.length === b.length;
}

test("isSameLength", () => {
  expect(isSameLength([1, 2], [1, 2, 3])).type.toBe<boolean>();
  expect(isSameLength("one", "two")).type.toBe<boolean>();

  expect(isSameLength).type.not.toBeCallableWith(1, 2);
});

To group and organize tests, TSTyche has:

  • test(), it() and describe() helpers,
  • with .only, .skip and .todo run mode flags.

Assertions

The expect style assertions can check either the inferred type of an expression (as in the example above) or a type directly:

import { expect } from "tstyche";

type AsyncProps<T> = {
  [K in keyof T]+?: T[K] | Promise<T[K]>;
};

type WithLoading<T> = T & { loading: boolean };

expect<WithLoading<AsyncProps<{ query: string }>>>().type.toBe<{
  query?: string | Promise<string>;
  loading: boolean;
}>();

Here is the list of all matchers:

  • .toBe(), .toBeAssignableFrom(), .toBeAssignableTo() compare types or type of expressions,
  • .toAcceptProps() checks the type of JSX component props,
  • .toBeApplicable ensures that the decorator function can be applied,
  • .toBeCallableWith() checks whether a function is callable with the given arguments,
  • .toBeConstructableWith() checks whether a class is constructable with the given arguments,
  • .toHaveProperty() looks up keys on an object type.

Runner

The tstyche command is the heart of TSTyche. It allows you to select test files by path, filter tests by name and run them against specific versions of TypeScript:

tstyche query-params --only multiple --target '>=5.6'

It is that simple! Actually, TSTyche does even more:

  • checks messages of errors suppressed by // @ts-expect-error,
  • generates type tests from a data table,
  • runs tests in watch mode.

Try It Out

Try TSTyche online on StackBlitz:

Open in StackBlitz

Documentation

Visit tstyche.org to view the full documentation.

License

MIT © TSTyche

Sponsor this project

 

Contributors 5

0