Karma vs测试框架Jasmine, Mocha, QUnit

几个问题:

  • Karma和测试框架X (Jasmine, Mocha, QUnit)是如何相互关联的?
  • 在Java世界中,什么是等效的框架?我假设Jasmine, Mocha, QUnit等于jUnit/TestNG。卡玛呢?
  • 我可以在没有Karma的情况下运行测试框架X(例如Jasmine)吗?
  • Karma是用于单元测试还是集成/端到端测试?参考表示用于单元测试,而表示用于端到端测试。
105251 次浏览

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

这个想法是浏览器本身没有加载测试文件、运行它们和报告结果的概念。 因果报应所做的(大致)是:

  • 启动一个小型web服务器来提供“客户端”javascript文件进行测试(1)
  • 还为“客户端”javascript文件提供测试(或通常称为Specs) (2)
  • 提供一个自定义的网页,运行测试的javascript代码(3)
  • 启动浏览器加载此页(4)
  • 向服务器报告测试结果(5)
  • karma可以再次将结果报告到文本文件、控制台、CI服务器喜欢的任何东西等…

看每个部分:

(1)这些文件将是你实际的js文件;你要告诉卡玛怎么装子弹。如果你使用requirejs,有一个karma插件,需要一些配置。

(2)这些测试可以在各种Javascript测试框架(Jasmine, QUnit, Mocha) ;这是在浏览器中运行的JS代码。

(3)每个测试框架的自定义网页会有所不同。这就是为什么karma有不同框架的插件。

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

(5)向karma报告同样依赖于框架,并由karma插件处理。

我来回答你的问题:

  • 在Java中,大多数人使用JUnit,它既是一个编写测试和运行测试的框架,但不存在区分测试运行环境和测试报告聚合环境的问题;karma将是JUnit Suite和JUnit TestRunner之间缺失的一块
  • 是的,你可以“手工”完成业力所做的一切——选择一个框架(茉莉花、qunit、摩卡),并遵循指示。因果报应的优势在于,如果你在一个标准的设置中,它提供了一个开箱即用的解决方案。
  • Karma既可以用于单元测试(使用jasmine / qunit /其他),也可以用于集成测试(将使用另一个API,如webdriver,来驱动浏览器)

设计Karma的人的论文在描述现有解决方案和比较它们方面提供了非常丰富的信息,当然也描述了Karma本身

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

总结:Karma是一个测试运行者。它可以使用QUnit,茉莉,摩卡,…Karma在改善TDD/BDD开发周期方面比其他测试运行器更有优势。它“监视”文件,因此当您保存更改时,Karma会立即运行测试并报告,无需切换上下文到Web浏览器来运行测试。

简而言之,也许问题应该是卡玛和茉莉或摩卡或QUnit?

有一种更简单的方法可以理解它们的区别:

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

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

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