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

问题描述 投票:0回答:2

我是软件测试新手,我想知道如何在 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)
// 实际和预期结果

有人对使用什么单元测试框架有建议吗?

typescript unit-testing frameworks
2个回答
17
投票

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

$ npm i -D @types/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' );
} );

登录测试

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

如果您在 Nodejs 中运行单元测试,我建议安装以下软件包:

  • mocha // mocha 作为测试框架
  • @types/mocha // 需要在打字稿中使用 mocha
  • chai // 需要expect
  • @types/chai // 需要在打字稿中使用 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 可能是适合您的测试框架。


0
投票

如果您对单元测试的新方法感兴趣,请查看此内容。面向 OOP,不需要断言库。 https://www.npmjs.com/package/@archikoder/architest

您仍然可以测试您的功能:https://medium.com/@ralaivao.safe/how-to-test-functions-with-architest-81f611dd0170

© www.soinside.com 2019 - 2024. All rights reserved.