Tôi đang sử dụng grunt để quản lý một bộ kiểm tra chạy mocha. Một trong những điều cần thiết trong bộ kiểm thử mocha là các biến môi trường nhất định được thiết lập sao cho các kiểm thử được thực hiện đúng dựa trên môi trường của nhà phát triển đang chạy thử nghiệm. Một trong các biến môi trường này sẽ có giá trị khác nhau trên mỗi máy của nhà phát triển, vì vậy chúng tôi thực thi một tập lệnh bash để trả về giá trị đó cho biến môi trường mà chúng ta đang thiết lập.Thực thi tập lệnh shell trong gruntfile và gán kết quả cho biến
Tôi đang sử dụng grunt.util.spawn để chạy tập lệnh và gán kết quả của nó cho một biến được xác định trong gruntfile của tôi, sau đó grunt-env để đặt biến môi trường với giá trị đó. Dưới đây là một ví dụ về gruntfile của tôi (trong 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']
Để thực hiện điều này, tôi gọi ...
/path/to/grunt test
Thật không may, mặc dù chạy init, gọi lại ở đó dường như không có được thực hiện, do đó, envvar không bao giờ được thiết lập. Oddly, nếu tôi vô hiệu hóa đăng nhập trong các bài kiểm tra của tôi, gọi lại DOES được gọi, nhưng chỉ sau khi các nhiệm vụ env và simplemocha của tôi đã được khởi động. Sự hiểu biết của tôi về nhiệm vụ grunt là họ đang chặn, vì vậy tôi mong đợi nhiệm vụ init phải hoàn thành (ngay cả với chức năng async trong đó) trước khi chuyển sang nhiệm vụ tiếp theo.
Bất kỳ ý tưởng nào?
lý do số phiếu xuống là gì? Nếu có điều gì đó tôi có thể làm để làm cho câu hỏi và câu trả lời của tôi tốt hơn, tôi rất muốn! – Clandestine