私はgruntを使ってモカランテストのスイートを管理しています。モカテストスイートに必要なことの1つは、テストを実行している開発者の環境に基づいてテストが適切に実行されるように、特定の環境変数を設定することです。これらの環境変数の1つは開発者のマシンごとに異なる値を持つので、設定している環境変数にその値を返すbashスクリプトを実行します。gruntfileでシェルスクリプトを実行し、結果を変数に代入する
私はgrunt.util.spawnを使用してスクリプトを実行し、その結果を自分のgruntfileで定義された変数に割り当て、grunt-envでその値で環境変数を設定します。以下は、(CoffeeScriptの中に)私のgruntfileの例である:
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タスクが開始された後にのみ呼び出されます。わずらわしいタスクの私の理解は、彼らがブロックされているので、私は次のタスクに移動する前にinitタスクが完了する必要が期待(その中に非同期関数で)する必要があります。
アイデア?
ダウン票の理由は何ですか?私の質問と答えを良くするためにできることがあれば、私は大好きです! – Clandestine