Karma vs 测试框架 Jasmine, Mocha, QUnit [已关闭]

几个问题:

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

答案 1

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

这个想法是浏览器本身没有加载测试文件,运行它们和报告结果的概念。业力的作用是(大致) :

  • 启动一个小型Web服务器来提供要测试的“客户端”javascript文件(1)
  • 还为“客户端”javascript文件提供测试(或规范,因为它们通常被称为)(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)向业力报告同样依赖于框架,并处理业力插件。

因此,要回答您的问题:

  • 在Java中,大多数人使用JUnit,JUnit既是编写测试并运行它们的框架,又没有区分运行测试的环境和聚合测试报告的环境的问题;业力将是JUnit Suite和JUnit TestRunner之间缺失的部分。
  • 是的,你可以做业力“手工”所做的一切 - 选择一个框架(茉莉花,qunit,摩卡)并按照说明进行操作。业力的优点是,如果您处于标准设置中,它可以提供开箱即用的解决方案。
  • Karma既可用于单元测试(使用jasmine / qunit / whatever)又可用于集成测试(将使用另一个API,如webdriver,来驱动浏览器)

答案 2

一种理解差异的简短方法:

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

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

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