如何在同一个codebase / package.json中包含Mocha和Karma测试(服务器端和客户端)?

时间:2016-02-26 01:16:30

标签: mocha karma-runner karma-mocha

我在./test中有2个测试文件。

假设test1.js是一个Mocha测试,它会旋转服务器并针对URI运行各种请求,以确定它们的行为都符合预期。

test2.js是一个Mocha测试,它使用Karma加载特定脚本(包括angular-mocks.js)并在少数浏览器中运行,以确保那里的所有功能按预期运行。< / p>

package.json中,我将test属性配置为:

"scripts": {
  "test": "./node_modules/.bin/mocha --reporter spec -t 5000"
},

很酷,我可以从命令行npm test运行Mocha。但是哦 - 不,Mocha运行我的两个脚本,test2.js当然会崩溃整个事情,因为其中的逻辑假定它在Karma的上下文中运行(对不起,如果我没有正确描述这个)。

我可以有2个测试文件夹,testtest-ng或其他东西,但我认为最终我希望能够npm test并运行不同的测试集,即:< / p>

"./node_modules/.bin/mocha --reporter spec -t 5000"
"./node_modules/.bin/karma start"

并将它们配置为每个运行正确的js文件。我一直在寻找像疯了一样寻找到客户端和服务器端的测试在同一回购存在的例子,但我只找到的教程和博客等以证明一方或另一方。有人可以帮助我朝着正确的方向前进吗?

编辑:我应该考虑/组织这样的测试吗?

./tests/server/**.js
./tests/e2e/**.js
./tests/unit/**.js

我可能根据默认情况下npm使用./test/文件夹的事实做出假设。

编辑2:我现在正在做我上面描述的内容,或多或少,并在repo的自述文件中描述我的测试:

  

Angular单元测试可以通过Karma运行:./node_modules/.bin/karma start karma.conf.js

     

角度端到端测试可以通过量角器运行:./node_modules/.bin/protractor protractor.conf.js

     

Express单元测试可以通过Mocha运行:./node_modules/.bin/mocha ...

所以现在我根本没有使用npm test,我想知道使用它有什么好处。

1 个答案:

答案 0 :(得分:5)

您可以在package.json

中添加类似内容
"scripts": {
  "unittest": "mocha --reporter spec tests/test1.js",
  "browsertest": "mocha --reporter spec -t 5000 tests/test2.js",
  "test": "npm run unittest && npm run browsertest"
}

并让Mocha(或Karma等)各有一个脚本,可以通过例如单独运行。

$ npm run browsertest

将构建系统的所有部分直接放入package.json中的脚本有几个好处:

  • 您可以避免全局安装npm软件包或使用./node_modules/.bin/mocha之类的咒语,因为 npm已经知道./node_modules/.bin
  • 将所有内容放入npm脚本可以轻松扩充标准的npm操作 (startstoptest等),这反过来又更容易与他人合作, 人和框架(如Phusion Passenger)。
  • 你不需要Grunt,Gulp等。

您可以使用npm run获取脚本列表。

有关优点的更全面的描述,请参阅Keith Cirkel的 great blog post