2013-08-21 8 views
7

पर परिणाम असाइन करें मैं मोचा-रन परीक्षणों का एक सूट प्रबंधित करने के लिए गड़बड़ी का उपयोग कर रहा हूं। मोचा टेस्ट सूट में आवश्यक चीजों में से एक यह है कि कुछ पर्यावरण चर सेट किए जाते हैं ताकि टेस्ट चलाने वाले डेवलपर के पर्यावरण के आधार पर परीक्षण ठीक से निष्पादित किए जा सकें। इन पर्यावरण चरों में से प्रत्येक के पास प्रत्येक डेवलपर की मशीन पर एक अलग मूल्य होगा, इसलिए हम उस पर्यावरण चर के लिए उस मान को वापस करने के लिए एक बैश स्क्रिप्ट निष्पादित करते हैं जिसे हम सेटिंग कर रहे हैं।gruntfile में खोल स्क्रिप्ट निष्पादित करें और परिणाम

मैं स्क्रिप्ट चलाने के लिए grunt.util.spawn का उपयोग कर रहा हूं और इसके परिणाम को मेरे gruntfile में परिभाषित चर के लिए असाइन कर रहा हूं, और फिर उस मान के साथ पर्यावरण चर सेट करने के लिए grunt-env।

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 

दुर्भाग्य से ..., हालांकि init रन कॉलबैक उसमें पाने के लिए प्रतीत नहीं होता: नीचे मेरी gruntfile (coffeescript में) का एक उदाहरण है निष्पादित, तो envvar कभी सेट नहीं हो जाता है। विचित्र रूप से, अगर मैं अपने परीक्षणों में लॉगिंग अक्षम करता हूं, तो कॉलबैक कॉल किया जाता है, लेकिन केवल मेरे env और simplemocha कार्यों को बंद कर दिया गया है। गड़बड़ी के कार्यों की मेरी समझ यह है कि वे अवरुद्ध हो रहे हैं, इसलिए मैं अगले कार्य पर जाने से पहले इनिट कार्य को पूरा करना होगा (यहां तक ​​कि एसिंक फ़ंक्शन के साथ)।

कोई विचार?

उत्तर

10

हालांकि मैं अभी भी अस्पष्ट नहीं हूं कि ऊपर की विधि क्यों काम नहीं कर रही है, और कुछ शोध के बाद, किसी भी प्रतिक्रिया का स्वागत करते हैं, मुझे shelljs मिला, जिसे मैं अपनी समस्या का समाधान करने के लिए उपयोग करने में सक्षम था। भी

module.exports = (grunt) -> 
    shell = require 'shelljs' 
    envvar = shell.exec('./bin/get_envvar.sh', {'silent':true}).output 

    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 'test', ['env', 'simplemocha'] 

एक बहुत क्लीनर: shelljs खोल exec कर सकते हैं तुल्यकालिक आदेशों के बाद से, मैं कॉलबैक साथ काम करने के लिए जब मैं वास्तव में ब्लॉक करने के लिए चीजें चाहते हैं नहीं है!

संदर्भ:

+2

नीचे वोट के लिए क्या कारण है? अगर ऐसा कुछ है जो मैं अपना प्रश्न बनाने और बेहतर जवाब देने के लिए कर सकता हूं, तो मुझे अच्छा लगेगा! – Clandestine

संबंधित मुद्दे