Używam pomruków do zarządzania pakietem testów przeprowadzanych na mokro. Jedną z rzeczy wymaganych w pakiecie testowym mokka jest ustawienie pewnych zmiennych środowiskowych, aby testy były wykonywane poprawnie w oparciu o środowisko programisty przeprowadzającego testy. Jedna z tych zmiennych środowiskowych będzie miała inną wartość na każdym komputerze programisty, więc wykonamy skrypt bash, aby zwrócić tę wartość dla zmiennej środowiskowej, którą ustawiamy.Wykonywanie skryptu powłoki w pliku gruntów i przypisywanie wyniku do zmiennej
Używam polecenia grunt.util.spawn do uruchomienia skryptu i przypisania jego wyniku do zmiennej zdefiniowanej w moim pliku gruntowym, a następnie do pobrania zmiennej środowiskowej o tej wartości. Poniżej znajduje się przykład mojego gruntfile (w 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']
Aby to wykonać, wzywam ...
/path/to/grunt test
Niestety, chociaż startowych tras, callback nich nie wydaje się, aby uzyskać wykonane, więc envvar nigdy nie zostanie ustawiony. Dziwnie, jeśli wyłączę logowanie w moich testach, wywołanie zwrotne zostanie wywołane, ale dopiero po uruchomieniu zadań env i simplemocha. Moje rozumienie zadań pomruczania jest takie, że są one blokowane, więc oczekiwałbym, że zadanie init będzie musiało zostać zakończone (nawet z zawartą w nim funkcją asynchroniczną) przed przejściem do następnego zadania.
Wszelkie pomysły?
Jaki jest powód do głosowania w dół? Jeśli jest coś, co mogę zrobić, aby lepiej odpowiedzieć na moje pytanie i odpowiedź, bardzo bym chciał! – Clandestine