【问题标题】:Running tests on Typescript source code Versus the generated JavaScript在 Typescript 源代码与生成的 JavaScript 上运行测试
【发布时间】:2020-12-04 05:17:53
【问题描述】:

在一个 Web 项目中,TypeScript 用于对整个应用程序、前端和后端以及测试进行编程。然后全部编译部署为 JavaScript;

在部署期间运行测试需要什么。直接在 TypeScript 源代码上运行它是否更有意义?还是在生成的 JavaScript(稍后部署到服务器)上运行它更有意义

请记住,根据运行它的具体情况,它对代码覆盖率报告等内容有一些小的影响。

一种思路是在 TypeScript 源代码上运行它,因为这是程序员正在生成的并且可以直接控制的内容。

另一方面,在部署后最终运行的是 JavaScript 生成的代码。

这有公认的模式吗?

【问题讨论】:

  • 测试TS源代码。您说 JS 生成的代码是最终运行的 - 但生成的 JS 代码也是 TS 测试套件最终测试的。测试的反馈也将适合您的 TS 代码(例如,指向 TS 文件中的行而不是无法识别的编译 JS 代码)。您无法可靠地测试已编译的 JS 代码,因为您无法保证编译的内容(例如符号名称)在不同版本的 TS 或 tsconfig.json 设置之间保持不变。预编译然后测试编译后的代码确实没有任何(明显的)好处。
  • 测试通常使用与测试内容相同的语言编写。考虑到测试也将被编译。假设编译器是完美的。
  • 谢谢大家,我很惊讶你没有把它作为答案,这样你就可以得到荣誉。

标签: javascript typescript testing mocha.js continuous-deployment


【解决方案1】:

我曾经测试过它的 js 编译代码,但后来我发现在 Typescript 文件上运行测试更有意义。主要原因是在任何测试失败时更容易调试,因为我们在同一个 Typescript 文件上进行编码和测试。

以下是调试失败测试的示例:

⚠️ 查看expect 行号,它在 Typescript 和编译的 Javascript 中存在差异

test.ts

import { expect } from 'chai';

describe('sum', () => {
  it('should return 3', () => {
    expect(2 + 1).to.equal(2); // line 5
  })
})

和它的js编译

"use strict";
exports.__esModule = true;
var chai_1 = require("chai");
describe('a', function () {
    it('should return a', function () {
        chai_1.expect(2 + 1).to.equal(2); // line 6, different number to its source code
    });
});

使用ts-mocha 对 Typescript 文件的测试结果显示第 5 行的正确有问题的行号

sum
    1) should return 3


  0 passing (12ms)
  1 failing

  1) sum
       should return 3:

      AssertionError: expected 3 to equal 2
      + expected - actual

      -3
      +2
      
      at Context.<anonymous> (mocha/65152263/a.test.ts:5:22) <--- Match with Typescript source code ✅
      at processImmediate (internal/timers.js:439:21)

同时,对于 js 测试结果,它会给你第 6 行。?

对于一个小测试文件,找问题可能不会太麻烦,但如果我们有很多测试,那就不是很好了。

【讨论】:

  • 帮助定位失败测试的一种可能解决方案是在标题和断言消息中添加测试编号。例如,在tap 中,单元测试运行器:tap.test("01 - check number", (t) =&gt; { t.equal(1, 2, "01"); t.end(); }); — 我编写了 eslint 规则来自动维护测试编号,eslint-plugin-test-num — 理论上它可以适用于 chaijest 或其他任何东西 — 用于例如,查看我的真实产品测试 github.com/codsen/codsen/blob/main/packages/string-strip-html/… — 它适用于我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多