0.4.0 • Published 6 years ago

tsst-tycho v0.4.0

Weekly downloads
1
License
ISC
Repository
-
Last release
6 years ago

Installation

# global
npm install -g tsst
# local
npm install tsst --save-dev

What is it?

Uhh. This is an experimental library/tool/utility/thing to aid testing of TypeScript semantics.

What does it do?

At its core, this is a TypeScript transformer that takes semantic build errors and turns them into runtime errors. Here's the show-don't-tell explanation.

Your tests

type ZeroOneToBoolean<T extends "0" | "1">
    = {"0": false, "1": true}[T];

describe("ZeroOneToBoolean", () => {
    it("works with '0'", () => {
        type A = ZeroOneToBoolean<"0">;
    });

    it("works with '1'", () => {
        type A = ZeroOneToBoolean<"1">;
    });

    // This test should fail for demonstration purposes
    it("works with the number 0", () => {
        type A = ZeroOneToBoolean<0>;
    });
});

What your tests become

describe("ZeroOneToBoolean", () => {
    it("works with 0", () => {
    });

    it("works with 1", () => {
    });

    // This test should fail for demonstration purposes
    it("works with the number 0", () => {
        throw new Error("​​Type '0' does not satisfy the constraint '\"0\" | \"1\"'.​​");
    });
});

In this early form, this only tests for successful compilation.

What might it do soon?

  • Negative tests that let you expect specific errors
  • Have some form of cli that makes it more usable
  • Have its own tests. This project is currently horrendously untested because I'm not sure what the best way to test this is.
  • Have a better name?
  • Change completely in any number of ways
  • Stop parsing full tests and become a block-local transformation

How does one use this?

If you install this package globally, you can use tsst to transform the tests. This is a very basic builder. It uses the local tsconfig.json and takes a single argument for a test glob.

# global install
tsst "**/*.test.ts"
# local install
node_modules/.bin/tsst "**/*.test.ts"

The TypeScript compiler provides hooks for specifying custom transformers, but tsc does not expose these. While many common tools like ts-loader are starting to support transformers, most don't yet provide transformers with access to the ts.Program object that this requires.

I've been messing about with Wallaby.js a bit recently, and tried to get it working with that, to partial success. They were absolutely fantastic about adding support for transformers for me with a feature-request-to-release turn-around time of about 2 hours. Wallaby.js runs and reports the transformed tests correctly, but there are some problems with line numbers and error positions not lining up. I haven't fully pinned these down yet, and am not sure to what degree these issues are solvable by this tool.

0.4.0

6 years ago

0.3.9

6 years ago

0.3.8

6 years ago

0.3.7

6 years ago

0.3.6

6 years ago

0.3.5

6 years ago

0.3.4

6 years ago

0.3.3

6 years ago