Karma与测试框架Jasmine、Mocha、QUnit的比较

274

几个问题:

  • Karma和测试框架X(Jasmine、Mocha、QUnit)之间有什么关系?
  • Java世界中的等价框架是什么?我假设Jasmine、Mocha、QUnit等于jUnit/TestNG。那Karma呢?
  • 我可以不用Karma运行测试框架X(例如Jasmine)吗?
  • Karma是用于单元测试还是集成/端到端测试? 这个参考文献显示是用于单元测试,但是这篇文章说是用于端到端测试。

我们使用Mocha而不是Karma来运行测试,但是很多开发者使用多个测试框架 - the_red_baron
3个回答

438

Karma是一个浏览器测试运行器。

这个想法是,浏览器本身没有加载测试文件、运行它们和报告结果的概念。 Karma所做的事情大致如下:

  • 启动一个小型Web服务器,向将要进行测试的“客户端”JavaScript文件提供服务(1)
  • 同时提供包含测试的“客户端”JavaScript文件,通常称为“Specs”(2)
  • 提供一个自定义的Web页面,该页面将运行测试的JavaScript代码(3)
  • 启动一个浏览器来加载此页面(4)
  • 将测试结果报告给服务器(5)
  • Karma然后可以将结果再次报告给文本文件、控制台、您的CI服务器喜欢的任何内容等...

每个部分的详细信息如下:

(1) 这些文件将是您实际的JS文件;您将告诉Karma如何加载它们。如果您使用requirejs,则有一个Karma插件,需要一些配置。

(2) 这些测试可以使用各种JavaScript测试框架(Jasmine、QUnit、Mocha)编写;这是在浏览器中运行的JS代码。

(3) 自定义Web页面对于每个测试框架都会略有不同;这就是为什么Karma具有不同框架的插件。

(4) Karma可以在许多浏览器(FF、Chrome,或像PhantomJs这样的无头浏览器)中启动页面。

(5) 报告给Karma的内容与框架相关,并用Karma插件处理。

因此,回答您的问题:

  • 在Java中,大多数人使用JUnit,它既是编写测试和运行测试的框架,但没有区分运行测试的环境和聚合测试报告的环境的问题;Karma将是JUnit Suite和JUnit TestRunner之间缺少的一块。
  • 是的,您可以手动完成Karma所做的“所有事情” - 选择一个框架(Jasmine、QUnit、Mocha),并按照说明操作。 Karma的优点是,如果您处于标准设置中,它提供了即插即用的解决方案。
  • Karma可以用于单元测试(使用jasmine/qunit或其他框架)和集成测试(使用另一个API,如webdriver,来驱动浏览器)

  • 64
    这值得写一篇博客文章或类似的内容。 - Willa
    Karma可以在许多浏览器中启动页面(如FF、Chrome或无头浏览器PhantomJs)。Jasmine也是这样吗?我们可以在许多框架上进行测试,并选择在conf js中设置。 - Wang'l Pakhrin
    1
    @Wang'lPakhrin 当然可以在(m)任何浏览器中使用jasmine。我的意思是,从技术上讲,karma可以启动你想要测试的(m)任何浏览器。在撰写本文时,jasmine并不负责实际启动浏览器(我仍然认为它不会这样做)。希望这能澄清事情! - phtrivier
    "Jasmine vs. Mocha, Chai, and Sinon" 的翻译。 - escapedcat
    1
    @Willa 我基于这个答案制作了一个YouTube视频 https://www.youtube.com/watch?v=bJc078szrZA :) - bersling

    76

    理解区别的一种简短方法:

    使用普通的Jasmine / Mocha进行测试的人很可能是使用Node虚拟机运行所有代码。

    将Karma添加到混合中(在您现有的选择框架之上),将使用其他浏览器的引擎运行您的测试套件。

    这样做可以获得浏览器环境提供的小额外功能。测试涉及DOM相关的代码会更容易,但您也将放弃由Node引擎提供的额外资源(如文件系统/ shell访问)。


    40
    那个设计Karma的人的论文非常详细地描述了现有解决方案并进行了比较,当然还介绍了Karma本身。

    https://github.com/karma-runner/karma/blob/master/thesis.pdf

    Karma是一个测试运行器。它可以被QUnit、Jasmine、Mocha等使用。相比其他测试运行器,Karma有优势,可以改善您的TDD/BDD开发周期。它“监视”文件,因此当您保存更改时,Karma会立即运行测试并报告结果,无需切换到Web浏览器来运行测试。
    简而言之,也许问题应该是Karma和Jasmine或Mocha或QUnit?

    2
    你能否从链接中提供一个小总结,以完善你的回答? - winner_joiner
    2
    Karma能够运行Jest测试吗? - SuperUberDuper
    你也可以在 Jasmine 中观看吗?我想是的,但我不太记得了。 - Wang'l Pakhrin
    @Wang'l Pakhrin,我不知道Jasmine是否具有手表功能,我只使用nodemon。 "nodemon --exec jasmine",每次保存文件时它都会运行测试。 - snowfrogdev
    论文中没有提到Jasmine。 - Carl G

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接