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

Cha*_*ser 7 mocha.js karma-runner karma-mocha

我有2个测试文件./test.

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

test2.js是使用噶加载特定的脚本(包括摩卡测试angular-mocks.js),并运行在一些浏览器,以确保所有的功能预期的行为.

package.json我有这样的test属性配置:

"scripts": {
  "test": "./node_modules/.bin/mocha --reporter spec -t 5000"
},
Run Code Online (Sandbox Code Playgroud)

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

我有2个测试文件夹,testtest-ng什么的,但我想最终我希望能npm test和有不同组的运行测试,即:

"./node_modules/.bin/mocha --reporter spec -t 5000"
"./node_modules/.bin/karma start"
Run Code Online (Sandbox Code Playgroud)

并配置它们每个运行正确的js文件.我一直在疯狂地寻找一个例子,其中客户端和服务器端测试存在于同一个repo中,但我只是在寻找教程和博客文章等来展示其中一个.有人可以帮助我朝着正确的方向前进吗?

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

./tests/server/**.js
./tests/e2e/**.js
./tests/unit/**.js
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

J P*_*J P 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"
}
Run Code Online (Sandbox Code Playgroud)

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

$ npm run browsertest
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以避免全局安装npm软件包或使用咒语./node_modules/.bin/mocha,因为npm已经知道了./node_modules/.bin.
  • 把一切都变成NPM脚本可以很容易地增加标准NPM操作(start,stop,test等),这反过来又使得它更容易与他人协作,人以及框架(如的Phusion客运).
  • 你不需要Grunt,Gulp等.

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

有关优点的更全面描述,请参阅Keith Cirkel的 精彩博文.