Skip to content
This repository has been archived by the owner on Jun 10, 2021. It is now read-only.

wonderful-panda/tsc-test

Repository files navigation

Build Status

tsc-test

Testing TypeScript compilation (should succeed or should fail)

Basic usage

  1. put tsconfig.json into test directory.

    "noEmit" is recommended.

    {
        "compilerOptions": {
            "target": "es5",
            "module": "commonjs",
            "noEmit": true,
            "strictNullChecks": true
        },
        "filesGlob": [
            "*.ts"
        ],
        "exclude": [
            "node_modules"
        ]
    }
  2. put files to be tested into test directory.

    // should-succeed.ts
    
    interface Foo { foo: string; }
    
    export function test(foo: Foo) {
        console.log(foo.foo);
    }

    When compilation errors should be occurred, write error code inline after 4 slashes(////).

    // should-fail-1.ts
    
    interface Foo { foo: string; }
    
    export function test(foo: Foo) {
        console.log(foo.bar);       //// TS2339
    }

    You can write part of error message after error code. (with colon)

    // should-fail-2.ts
    
    interface Foo { foo: string; }
    
    export function test(foo: Foo) {
        console.log(foo.bar);       //// TS2339: Property 'bar' does not exist on
    }

    Or regular expression.

    // should-fail-3.ts (but this code is not wrong acturally ...)
    
    interface Foo { foo: string; }
    
    export function test(foo: Foo) {
        console.log(foo.foo);       //// TS2339: /property .* does not exist/i
    }
  3. run tsc-test command

    $ tsc-test -p test/tsconfig.json
    

    And you will get output like below:

    OK: test/should-fail-1.ts
    OK: test/should-fail-2.ts
    NG: test/should-fail-3.ts
    OK: test/should-succeed.ts
    
    test/should-fail-3.ts:6
      expected: TS2339: /property .* does not exist/i
      bat was:  <no error>
    

Run with test runner

ava

// runner.ts

import test from "ava";
import { Tester, formatFailureMessage } from "tsc-test";

const tester = Tester.fromConfig("<path to tsconfig.json>");
tester.sources.forEach(fileName => {
    test(fileName, t => {
        const failures = tester.test(fileName);
        if (failures.length > 0) {
            t.fail(formatFailureMessage(...failures));
        }
    })
});

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published