【问题标题】:How to unit test just one function, without browser, on Angular如何在没有浏览器的情况下在 Angular 上对一个功能进行单元测试
【发布时间】:2021-03-08 07:51:40
【问题描述】:

假设我有一个执行很长计算的函数:

export const veryLongCalculation = () => 1 + 1;

如何在 Angular 打开 Karma 和 配置其他任何东西的情况下对这个函数进行单元测试?

我想写一个这样的测试:

describe('Difficult Calculations', () => {
  it('should calculate', () => {
    const calcul = veryLongCalculation();
    expect(calcul).toBe(2);
  });
})

如果我运行ng test,它会启动 Karma 和浏览器(并且需要很长时间)。

我可以在不打开浏览器并初始化所有内容的情况下运行该测试吗?我想应该有一个命令来做到这一点,已经配置好了。怎么样?

【问题讨论】:

  • 尚未配置执行此操作的命令。 Angular CLI 的配置用于测试前端应用,而 Karma 是基于浏览器的测试运行器。
  • 那么,如果我想测试一个简单的功能,我必须从头开始配置 jasmine(或其他任何东西)?
  • 是的,您的用例不在 CLI 的默认设置中。
  • 尽量避免使用 karma runner。原因是 karma 使用真正的浏览器来运行测试,而 jest 使用最喜欢的命令行来运行它的测试。在 KARMA 上花费 4 到 5 分钟的测试只需要 1 到 2 分钟。

标签: angular typescript unit-testing jasmine


【解决方案1】:

我建议在无头模式下尝试 Chrome。这样 Karma 和 Chrome 会保留,但不会打开浏览器窗口,并且该过程会更快。

要对其进行测试,请将脚本添加到 package.json:

"test-headless": "ng test --watch=false --browsers=ChromeHeadless"

然后使用npm run test-headless 运行它。

请注意,基于 Angular 的代码在浏览器中运行,因此强烈建议在浏览器中运行测试套件。否则,测试可能会产生假阳性/阴性结果。

【讨论】:

  • 谢谢,我已经在无头模式下使用它,但是,这需要时间。那我就用 ts-node 测试动作,等到前端开发好了就忘了这种单元测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2014-07-29
  • 2012-07-06
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多