几个问题:

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


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插件处理。

我来回答你的问题:

in Java, most people use JUnit which is both a framework to write tests and run them, but does not have the problem of differentiating the environment in which tests are run and the one in which test reports are aggregated ; karma would be the missing piece between a JUnit Suite and a JUnit TestRunner Yes, you can do everything that karma does "by hand" - pick one framework (jasmine, qunit, mocha) and follow instructions. The advantage of karma is that it provide a solution out-of-the-box, if you're in a standard setup. Karma can be used for both unit test (with jasmine / qunit / whatever) and integration tests (which will use another API, like webdriver, to drive the browser)


设计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访问)