Sto utilizzando grunt per gestire una suite di test eseguiti da mocha. Una delle cose necessarie nella suite di test mocha è che determinate variabili d'ambiente siano impostate in modo che i test siano eseguiti correttamente in base all'ambiente dello sviluppatore che esegue i test. Una di queste variabili d'ambiente avrà un valore diverso sulla macchina di ogni sviluppatore, quindi eseguiamo uno script bash per restituire quel valore per la variabile d'ambiente che stiamo impostando.Esegui lo script di shell in gruntfile e assegna il risultato alla variabile
Sto usando grunt.util.spawn per eseguire lo script e assegnare il suo risultato a una variabile definita nel mio gruntfile, quindi grunt-env per impostare la variabile di ambiente con quel valore. Di seguito è riportato un esempio del mio gruntfile (in 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']
Per eseguire questo, mi chiamano ...
/path/to/grunt test
Purtroppo, anche se corre init, la richiamata in essa non sembra per ottenere eseguito, quindi envvar non viene mai impostato. Stranamente, se disabilito l'accesso ai miei test, viene richiamato il callback, ma solo dopo che le mie attività env e simplemocha sono state avviate. La mia comprensione dei task grunt è che stanno bloccando, quindi mi aspetto che l'attività di init debba essere completata (anche con la funzione async) prima di passare all'attività successiva.
Qualche idea?
Qual è la ragione per i voti verso il basso? Se c'è qualcosa che posso fare per rendere la mia domanda e risposta meglio, mi piacerebbe! – Clandestine