2012-08-12 73 views
2

我嘗試將mocha與coffeescript和chai結合使用。包含測試每個文件之前,我想包括以下文件:在每次測試之前都無法獲得所需文件

測試/ _helper.coffee

path = require 'path' 

AppDir = path.resolve("#{__dirname}/../src/app") 

chai = require('chai') 
should = chai.should() 
factories = require('chai-factories') 
chai.use(factories) 

這是爲了讓我有機會獲得APPDIR variabel。這樣當我想要一個文件時,我不必指定應用程序目錄的完整路徑。

測試/應用/ setup-test.coffee

describe 'Setup instance', -> 
    it 'should be a object', -> 
     setup = require "#{AppDir}/setup" 
     setup.should.be.a('object') 

我嘗試以下設置:

新增_hellper.coffee摩卡命令行選項,如下所示:

./node_modules/.bin/mocha --require coffee-script --require test/_helper.coffee --compilers coffee:coffee-script --recursive --reporter spec test 

等:

./node_modules/.bin/mocha --require coffee-script --compilers coffee:coffee-script --recursive --reporter spec test/_helper.coffee test 

我嘗試了正常需要setup-test.coffee:

require '../_helper.coffee' 

什麼都法我用,我得到以下錯誤,如果我運行測試:

Setup instance 
    1) should be a object 


    ✖ 1 of 1 test failed: 

    1) Setup instance should be a object: 
    ReferenceError: AppDir is not defined 
     at Context.<anonymous> (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/test/app/setup-test.coffee:8:28) 
     at Test.Runnable.run (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runnable.js:184:32) 
     at Runner.runTest (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runner.js:300:10) 
     at Runner.runTests.next (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runner.js:346:12) 
     at next (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runner.js:228:14) 
     at Runner.hooks (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runner.js:237:7) 
     at next (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runner.js:185:23) 
     at Runner.hook (/Users/ivotrompert/Dropbox/projects/nodejs/getWallpapers/node_modules/mocha/lib/runner.js:205:5) 
     at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

這裏是我的MAKE文件,如果有人想知道我是怎麼運行測試:

的Makefile

REPORTER = spec 
DEFAULT_COMMAND = ./node_modules/.bin/mocha --require coffee-script --ui bdd --compilers coffee:coffee-script --recursive --growl --reporter 
check: test 

test: 
    @NODE_ENV=test $(DEFAULT_COMMAND) $(REPORTER) 
test-watch: 
    @clear 
    @NODE_ENV=test $(DEFAULT_COMMAND) $(REPORTER) --watch 
coverage: 
    @jscoverage --no-highlight src src-cov 
    @SRC_COV=1 $(DEFAULT_COMMAND) html-cov > coverage.html 
    @rm -rf src-cov 
ifeq ($(shell uname), Darwin) 
    @open coverage.html 
else 
    @xdg-open coverage.html &> /dev/null & 
endif 

.PHONY: test 

可有人請幫助我,謝謝。

回答

2

這是一個解決方案。

_helper.coffee

path = require 'path' 

exports.AppDir = path.resolve("#{__dirname}/../src/app") 

chai = require('chai') 
should = chai.should() 
factories = require('chai-factories') 
chai.use(factories) 

測試咖啡

{AppDir} = require "../helpers" 

describe 'Setup instance', -> 
    it 'should be a object', -> 
     setup = require "#{AppDir}/setup" 
     setup.should.be.a('object') 

我所做的是使用出口,並要求返回多個對象,你可以用逗號,如果你在你的_helper更多的出口將它們分開。咖啡。該命令是相關的。

附註: 但是,爲什麼你會在你的測試中需要一個文件?我不希望在一個測試的外部文件中有一些隱藏的設置。這並不能讓後面或其他人理解測試變得容易。

+0

我不使用這個爲一個文件,但我想用它的多文件,所以這是一個完美的解決方案。謝謝 – 2012-08-14 15:19:20

相關問題