我目前正在使用:
我的代码存在,src/
我用 CoffeeScript 编写测试。我make
用来构建和测试代码。
make build
将 CoffeeScript 编译src/
为lib/
.
make test
构建代码,然后在test/
.
make monitor
一旦测试发生变化,就会监视并运行测试。不幸的是,它不会重新编译代码。我使用 Vim 键绑定来调用make
,这也会触发 Mocha 重新运行测试。
编辑:如果这让您感到困扰,您可以运行.coffee --watch
-o lib/ -c src/
make coverage
生成代码覆盖率报告并将其放入lib-cov/report.html
.
我的Makefile
看起来有点像这样:
COFFEE = ./node_modules/.bin/coffee --compile
MOCHA = NODE_ENV=test ./node_modules/.bin/mocha
MOCHA_OPTS = \
--compilers coffee:coffee-script \
--require should \
--colors
REPORTER = spec
build:
@$(COFFEE) --output lib/ src/
test: build
@$(MOCHA) --reporter $(REPORTER) $(MOCHA_OPTS)
monitor:
@$(MOCHA) --reporter min $(MOCHA_OPTS) \
--watch --growl
coverage: instrument
@MYLIB_COV=1 $(MOCHA) $(MOCHA_OPTS) \
--reporter html-cov > lib-cov/report.html
instrument: build
@rm -rf ./lib-cov
@jscoverage ./lib ./lib-cov
.PHONY: build test monitor coverage instrument
您可能只需很少修改即可使用上述内容。
要使用 生成覆盖率报告make coverage
,必须针对已检测的代码lib-cov/
而不是 中的代码运行测试lib/
。要做到这一点,需要做三件事:
Makefile
应该设置一个环境变量,例如(根据MYLIB_COV
需要更改名称)。
您index.js
应该查看此环境变量,或者require
相应地查看:lib/
lib-cov/
// index.js
module.exports = process.env.MYLIB_COV
? require('./lib-cov/mylib')
: require('./lib/mylib');
如果您需要从多个源文件导出,您可以在此处合并它们。如果您index.js
的 package.json 中有除“main”以外的其他内容,请不要忘记更改它。
您的测试应该require '../'
:
# test/test.user.coffee
describe 'User', ->
User = {}
before ->
{User} = require '../'
describe '#equals()', ->
describe 'when users have the same username and host', ->
it 'should return true', ->
user1 = new User 'user', 'some.host.foo'
user2 = new User 'user', 'some.host.foo'
user1.equals(user2).should.be.true
# etc.
我将把它作为练习留给读者,以了解他们是否需要 Mockery 以及如果需要如何使用它。不过,我要指出,require
上面测试片段中的调用是在内部完成before
的,这是有原因的。
快乐编码!