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

How can I include Mocha and Karma tests (server-side and client-side) in the same codebase / package.json?

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

假设 test1.js 是一个启动服务器的 Mocha 测试,运行 对 URI 发出各种请求以确定它们是否都按预期运行。

test2.js 是一个 Mocha 测试,它使用 Karma 加载特定脚本(包括 angular-mocks.js)和 运行 在少数浏览器中以确保所有功能 表现符合预期。

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

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

太棒了,我可以从命令行 npm test 到 运行 Mocha。但是,哦不——Mocha 运行 是我的两个脚本,test2.js 当然会崩溃整个事情,因为其中的逻辑假设它是 运行ning 在 Karma 的上下文中(请原谅我我没有正确描述这一点)。

我可以有 2 个测试文件夹,testtest-ng 之类的,但我认为最终我希望能够 npm test 并有不同的测试集 运行,即:

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

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

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

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

我可能是基于 npm 默认使用 ./test/ 文件夹这一事实做出假设。

编辑 2: 我现在或多或少地在做我上面描述的事情,并且在 repo 的自述文件中描述了我的测试,例如:

Angular unit tests can be run via Karma: ./node_modules/.bin/karma start karma.conf.js

Angular end-to-end tests can be run via Protractor: ./node_modules/.bin/protractor protractor.conf.js

Express unit tests can be run via Mocha: ./node_modules/.bin/mocha ...

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

您可以在 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)。
  • 你不需要G运行t、Gulp等

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

有关优点的更详尽描述,请参阅 Keith Cirkel 的 great blog post.