【问题标题】:Tests don't run because typescript throws error when trying to test type checking测试不运行,因为 typescript 在尝试测试类型检查时抛出错误
【发布时间】:2018-12-23 00:43:14
【问题描述】:

尝试测试以确保只能为类型化变量分配某些值。如果分配了无效值,有没有办法使用 jest 引发错误,而 typescript 不会阻止测试运行并在测试运行之前引发错误?

In class constructor:
defaultValue: string | null

In test:
expect(() => instance.defaultValue = 100).toThrow()

我希望测试应该运行并确认这确实会引发错误,但在测试运行之前会引发错误,从而阻止所有测试运行。

【问题讨论】:

  • 您在这里的意图可以描述为希望验证 TypeScript 编译器是否有效。
  • 换句话说,你会说这个测试真的不值得写吗? @Pointy
  • 我的意思是这种验证对 somebody 来说是件好事,比如微软或者现在负责 TypeScript 的人,但我不确定这是否有意义对于恰好基于 TypeScript 的应用程序。

标签: javascript typescript testing types jestjs


【解决方案1】:

Typescript 不是运行时类型检查器,它是编译时类型检查器。这意味着在将代码转换为 javascript 之前检查所有类型,如果存在类型错误,则编译失败。如果您的课程从未经验证的来源获取数据,即您无法使用打字稿检查的 API。

您的测试意味着两件事中的一件:

您的构造函数旨在使用仅在运行时才知道的数据,但应该始终是字符串,如果不是,则必须抛出错误。在这种情况下,您可以将您的类强制转换为 any,这将完全删除对该对象的类型检查,但它可以让您测试您的类是否抛出错误。

const instance = new (MyClass as any)(42) // throws an error

或者您的类仅由开发人员明确提供给它的数据使用,并且您的测试仅验证打字稿不会允许开发人员犯错误。在这种情况下,这不是一个有用的测试,您应该删除它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2022-01-19
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多