如何编写 TypeScript 编译错误的测试

时间:2021-04-05 20:54:18

标签: typescript

我正在寻找一种可能性,如何编写一个单元测试来测试一个函数,如果它抛出一个 TypeScript 错误。

我有这个代码:

class MyClass {
  method() { }
  property: number = 10;
}

function someFunction<T, M extends keyof T & {
  [Property in keyof T[M]]: Function;
}>(object: T, method: M) {

}

const myClass = new MyClass();

// next row will throw an error because myClass.property isn't a function
someFunction(myClass, "property");

我需要测试这段代码是否会引发 TypeScript 错误。如果是这样,那么一切都会好起来的。

为什么?此代码只是一个示例。我有一个库,我的意图是定义一个函数应该做什么。我想为函数 someFunction 提供这些规则。所以这意味着方法的名称将始终是函数的名称,而不是数字或字符串等。

我想编写一个测试来检查我将来是否没有破坏这个逻辑。我想我可以把这个简单的例子放到一个单独的忽略文件中,并编写我自己的测试库,它将加载文件并直接运行 tsc 编译器。但是在我想做这样的事情之前,我想问一下是否有任何工具可以替代。

1 个答案:

答案 0 :(得分:1)

我刚刚在 CI 工具中添加了一个打字稿编译步骤,以防止我必须手动运行它(请参阅 https://github.com/cefn/lauf/blob/main/.github/workflows/tests.yml#L29-L30

在我的存储库中,我将 github 操作设置为运行 javax.crypto.Cipher 以显示我在允许合并之前可能在分支中引入的任何编译错误。它不是作为测试套件编写的,但它在管道的完全相同部分运行。

在您的情况下,您想在某个子文件夹上运行它(假设 tsc --noEmit 但知道编译失败,即反转退出状态 - 如果它不是零那很好,因此应该解析为零。如果它是零那不好,因此应该解析为非零。

如果您在 bash 环境中,您可以在 ./failures/ 中使用额外的脚本目标来实现这一点,然后从您使用的任何构建或集成管道中调用此 npm 脚本,例如 package.json

npm run verifyfailures