Ich verwende grunt, um eine Reihe von Mocha-Run-Tests zu verwalten. Eines der Dinge, die in der Mokka-Testsuite erforderlich sind, besteht darin, dass bestimmte Umgebungsvariablen so festgelegt werden, dass die Tests basierend auf der Umgebung des Entwicklers, der die Tests ausführt, ordnungsgemäß ausgeführt werden. Eine dieser Umgebungsvariablen hat auf jedem Entwicklungscomputer einen anderen Wert. Daher führen wir ein Bash-Skript aus, um diesen Wert für die von uns eingestellte Umgebungsvariable zurückzugeben.Shell-Skript in gruntfile ausführen und Ergebnis der Variablen zuweisen
Ich verwende grunt.util.spawn, um das Skript auszuführen und sein Ergebnis einer Variablen zuzuordnen, die in meiner Gruntdatei definiert ist, und grunt-env, um die Umgebungsvariable mit diesem Wert festzulegen. Im Folgenden ist ein Beispiel für meine 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']
dies auszuführen, rufe ich ...
/path/to/grunt test
Leider obwohl init läuft, darin der Rückruf nicht zu bekommen scheint ausgeführt, also wird envvar nie gesetzt. Seltsamerweise, wenn ich die Anmeldung in meinen Tests deaktiviere, wird der Callback aufgerufen, aber erst nachdem meine env und simplemocha Tasks gestartet wurden. Ich verstehe Grunt Tasks so, dass sie blockieren, also würde ich erwarten, dass die Init-Aufgabe abgeschlossen sein muss (sogar mit der Async-Funktion darin), bevor ich mit der nächsten Aufgabe fortfahre.
Irgendwelche Ideen?
Was ist der Grund für die nach unten Stimmen? Wenn ich etwas tun kann, um meine Frage und Antwort besser zu stellen, würde ich gerne! – Clandestine