我正在使用grunt來管理一組mocha-run測試。摩卡測試套件中需要的一件事情是設置某些環境變量,以便測試根據運行測試的開發人員的環境正確執行。其中一個環境變量在每個開發人員的機器上都會有不同的值,所以我們執行一個bash腳本來爲我們設置的環境變量返回該值。在gruntfile中執行shell腳本並將結果賦值給變量
我正在使用grunt.util.spawn運行腳本並將其結果分配給我的gruntfile中定義的變量,然後使用grunt-env設置具有該值的環境變量。下面是我gruntfile(在CoffeeScript中)的一個例子:
module.exports = (grunt) ->
envvar = ''
grunt.initConfig
pkg: grunt.file.readJSON('package.json')
env:
dev:
ENV_VAR: envvar
simplemocha:
options:
timeout: 30000
reporter: 'spec'
compilers: 'coffee:coffee-script'
all:
src: ['Tests/**/*.coffee']
grunt.registerTask 'init', ->
done = this.async
command =
cmd: './bin/get_envvar.sh'
grunt.util.spawn command, (error, result, code) ->
envvar = result
console.log 'envvar: ' + envvar
done
grunt.registerTask 'test', ['init', 'env', 'simplemocha']
要執行此,我叫......
/path/to/grunt test
不幸的是,雖然初始化運行,回調其中似乎並沒有得到執行,所以envvar永遠不會被設置。奇怪的是,如果我在我的測試中禁用日誌記錄,回調會被調用,但是隻有在我的env和simplemocha任務已經啓動之後。我對grunt任務的理解是,它們是阻塞的,所以我希望init任務必須完成(即使是其中的異步函數),然後才能轉到下一個任務。
任何想法?
什麼是對倒票的原因嗎?如果有什麼我可以做的,使我的問題和答案更好,我很樂意! – Clandestine