typescript - 如何在 Typescript 中编写单元测试?

标签 typescript unit-testing frameworks

我是软件测试的新手,我想知道如何在 Typescript 中编写单元测试。

我知道一些关于测试的知识,你有像 Asser 这样的方法。或 assertEquals但是如何在 Typescript 中做到这一点,我是否需要注意静态类型的类?

我想对这个功能进行单元测试

function calculateAverage(...numbers: number[]): number {
     let sum = 0
     for (var n in numbers) {
         sum += n
     }
     return sum/numbers.length
}

那么我应该使用什么框架来生成一些看起来像这样的测试:
assertEquals(calculateAverage(1,2,3), 2)//实际和预期结果

任何人都有关于使用什么单元测试框架的建议?

最佳答案

有一些 javascript 测试框架,您也可以在 typescript 中使用,例如 mocha 或 jest。您经常需要将类型安装为依赖项,例如

$ npm i -D @types/mocha

但也有完整的 typescript testing frameworks ,但通常有一个较小的社区。所以我建议从 jest 或 mocha 开始。我个人更喜欢 mocha 结合 chai 作为断言库。
我的测试如下所示:

it( 'logStack === false', async () => {
    const customOptions: LogUpTsOptions = { quiet: true, logStack: false };
    const logger = new LogUpTs( customOptions );
    expect( await logger.error( new Error( 'first' ) ) ).to.eql( '[ERROR] first' );
    expect( await logger.log( 'second' ) ).to.eql( '[LOG] second' );
} );

tests for logupts

Mocha 在 nodejs 和浏览器中工作(我有时使用 karma runner 来测试浏览器)。

如果您在 nodejs 中运行单元测试,我建议安装以下软件包:
  • mocha//mocha 作为测试框架
  • @types/mocha//需要在 typescript 中使用 mocha
  • chai//需要期待
  • @types/chai//需要在 typescript 中使用 chai
  • source-map-support//添加 source-map-support 到 nodejs
  • ts-node//在 nodejs 中直接运行 typescript

  • $ TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' mocha --opts ./mocha.opts
    

    我的 mocha.opts 文件:
    --require ts-node/register
    --require source-map-support/register
    --recursive
    src/**/*.spec.ts
    

    如果您需要更多“开箱即用”的东西,我认为 jest 可能是适合您的测试框架。

    关于typescript - 如何在 Typescript 中编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56241203/

    相关文章:

    javascript - Angular Reactive Forms - 排除表单提交上的空白字段

    typescript - Angular 2错误提供的参数与调用目标的任何签名都不匹配

    java - 在java中测试如何检查接口(interface)的方法是否被调用?

    c# - 为什么ConfigureAwait(true)在单元测试中不起作用?

    c# - .NET 应用程序的最佳调度程序?

    javascript - 是否可以向柱形图中的一个 google-chart 栏添加多个标签?

    javascript - 调用 Web API - 无法读取未定义的属性 'filter'

    java - Eclipse JUnit 5 支持

    xcode - SFML Mac 应用程序中格式错误的 Freetype 框架

    ios - 是什么导致 iOS 链接错误?