看看 Substack 的 optimist 模块和 flatiron 的 nconf。我的很多测试都依赖于外部参数,而 optimist 和 nconf 模块可以轻松地从 json 文件加载配置选项
在您的测试命令中传递 config.json 文件的路径
测试命令
mocha test/api-test.js --config=/path/to/config.json --reporter spec
api-test.js
var path = require('path')
var fs = require('fs')
var assert = require('assert')
var argv = require('optimist').demand('config').argv
var configFilePath = argv.config
assert.ok(fs.existsSync(configFilePath), 'config file not found at path: ' + configFilePath)
var config = require('nconf').env().argv().file({file: configFilePath})
var apiConfig = config.get('api')
var apiKey = apiConfig.key
config.json
{
"api": {
"key": "fooKey",
"host": "example.com",
"port": 9000
}
}
另类
我最近使用的另一种模式是config 模块。您可以指定./config/default.yml 文件用于定期运行,并指定./config/test.yml 文件用于测试。
在运行您的测试套件时,导出 NODE_ENV=test 并且配置模块将加载 test.yml
在您的代码中很容易访问配置对象
var config = require('config')
// config now contains your actual configuration values as determined by the process.env.NODE_ENV
var apiKey = config.api.key
设置 NODE_ENV=test 的一种简单方法是使用 makefile 运行测试。通过make test 运行所有测试。要运行单个测试,请执行 make one NAME=test/unit/sample-test.js
生成文件示例
MOCHA?=node_modules/.bin/mocha
REPORTER?=spec
GROWL?=--growl
FLAGS=$(GROWL) --reporter $(REPORTER) --colors --bail
test:
@NODE_ENV="test" \
$(MOCHA) $(shell find test -name "*-test.js") $(FLAGS)
one:
@NODE_ENV="test" \
$(MOCHA) $(NAME) $(FLAGS)
unit:
@NODE_ENV="test" \
$(MOCHA) $(shell find test/unit -name "*-test.js") $(FLAGS)
integration:
@NODE_ENV="test" \
$(MOCHA) $(shell find test/integration -name "*-test.js") $(FLAGS)
acceptance:
@NODE_ENV="test" \
$(MOCHA) $(shell find test/acceptance -name "*-test.js") $(FLAGS)
.PHONY: test