2014-05-09 5 views
14

मैं ग्रंट का उपयोग कर यूनिट परीक्षण मामलों को निष्पादित करने के लिए कर्म चला रहा हूं। यह पूरी तरह से चल रहा है, लेकिन परीक्षण निष्पादन पूरा होने के बाद कर्म प्रक्रिया स्वचालित रूप से बंद नहीं हो रही है। कोई त्रुटि नहीं/कोई लॉग नहीं। कॉन्फ़िगरेशन और ग्रंट फ़ाइल पर विवरण निम्नलिखित हैं।मेरा कर्म इकाई परीक्षण निष्पादित है लेकिन खुद को रोक नहीं रहा है (grunt का उपयोग करके)

कर्म-config.js

module.exports = function(config) { 
    config.set({ 
     // base path, that will be used to resolve files and exclude 
     basePath: './../../../../', 
     // frameworks to use 
     frameworks: ['jasmine'], 
     // generate js files from html templates 
     preprocessors: { 
      'ThemeLibrary/client/templates/categoryview/Category.html': 'ng-html2js' 
     }, 
     // list of files/patterns to load in the browser 
     files: [ 
      //Note: Order of file listing does matter therefore loading using * may cause issue 
      //Load external libraries 
      'ThemeLibrary/client/js/vendor/others/underscore-min_1.6.0.js', 
      'ThemeLibrary/client/js/vendor/jquery/jquery.min-1.9.1.js', 
      'ThemeLibrary/client/js/vendor/angularjs/angular.min.js', 
      'ThemeLibrary/client/js/vendor/angularjs/angular-resource.min.js', 
      'ThemeLibrary/client/js/vendor/angularjs/angular-route.min.js', 
      'ThemeLibrary/client/js/vendor/angularjs/keypress.js', 
      'ThemeLibrary/client/js/vendor/angularjs/truncate.js', 
      'Test/unit/client/lib/angularjs/angular-mocks.js', 
      'Test/unit/client/lib/jasmin/JasminHelper.js', 
      //Load application library used by code. 
      'ThemeLibrary/client/js/application/utilities/JavascriptExtension.js', 
      'ThemeLibrary/client/js/application/App.js', 
      //Load directives HTML templates 
      'ThemeLibrary/client/templates/categoryview/Category.html', 
      //Load application source code which needs to be tested 
      'ThemeLibrary/client/js/application/utilities/*.js', 
      'ThemeLibrary/client/js/application/controllers/*.js', 
      'ThemeLibrary/client/js/application/services/*.js', 
      'ThemeLibrary/client/js/application/factories/*.js', 
      'ThemeLibrary/client/js/application/factories/implementation/*.js', 
      'ThemeLibrary/client/js/application/directives/categoryview/Category.js', 
      //Load test data    
      'Test/unit/client/testdata/*.js', 
      'Test/unit/client/js/mock/*.js', 
      //Test files 
      'Test/unit/client/js/application/utilities/*.js', 
      'Test/unit/client/js/application/controllers/*.js', 
      'Test/unit/client/js/application/services/*.js', 
      'Test/unit/client/js/application/factories/implementation/*.js', 
      'Test/unit/client/js/application/factories/*.js', 
      //'Test/unit/client/js/application/directives/categoryview/Category.test.js' 
     ], 
     // list of files to exclude 
     exclude: [ 
     ], 
     // test results reporter to use 
     reporters: ['progress'], 
     // web server port 
     port: 9101, 
     // enable/disable colors in the output (reporters and logs) 
     colors: true, 
     // level of logging 
     logLevel: config.LOG_INFO, 
     // enable/disable watching file and executing tests whenever any file changes 
     autoWatch: true, 
     // Start these browsers 
     browsers: ['PhantomJS'], 
     // If browser does not capture in given timeout [ms], kill it 
     captureTimeout: 60000, 
     // Continuous Integration mode 
     // if true, it capture browsers, run tests and exit 
     singleRun: false, 
     ngHtml2JsPreprocessor: { 
      'moduleName': 'Templates', 
      stripPrefix: '.*/ThemeLibrary/client', 
      // Function that transforms the path to look exactly like you have it in templateUrl in your Angular code  
      cacheIdFromPath: function(filepath) { 

       //return filepath.match(/\/templates\/categoryview\/.*\.html/); 
       //return filepath.match('/templates/categoryview/Category.html'); 
       //return 'ThemeLibrary/client'+filepath; 
       return filepath; 
       //return 'ThemeLibrary/client/templates/categoryview/Category.html'; 

      } 
     } 
    }); 
}; 

Gruntfile.js

/** 
* New node file 
*/ 
module.exports = function(grunt){ 

    //globalConfig and paths which will used in the grunt script 

    var config={ 

      srcFolderName: 'src', 
      distFolderName: 'dist', 
      appFileName: 'server.js', 
      nodeModuleFolderName: 'node_modules', 
         testSourceFolderName: 'src-test', 
         testDestFolderName: 'Test', 
      //change this command based on project requirement 
      apiDocCommand:'apidoc -i src/server -o apidoc', 
      npmInstallCommand: 'npm install --prefix ./dist/<%= pkg.name %>/node_modules' 

    } 

    //init 
    grunt.initConfig({ 
     config:config, 
     pkg: grunt.file.readJSON('package.json'), 
     copy: { 

      //copy all source files to distribution folder 
      sourceFiles: { 
       cwd: '<%= config.srcFolderName %>', 
       src: [ '**' ], 
       dest: '<%= config.distFolderName %>/<%= pkg.name %>', 
       expand: true 
      }, 
      //copy main app file to dist folder 
      mainAppFile: { 
       src: '<%= config.appFileName %>', 
       dest: '<%= config.distFolderName %>/<%= pkg.name %>/<%= config.appFileName %>' 
      }, 
      copyPackage:{ 
       src: 'package.json', 
       dest: '<%= config.distFolderName %>/<%= pkg.name %>/package.json' 
      }, 
      //copy all source test files to distribution folder 
      testFiles: { 
       cwd: '<%= config.testSourceFolderName %>', 
       src: [ '**' ], 
       dest: '<%= config.distFolderName %>/<%= config.testDestFolderName %>', 
       expand: true 
      } 
      }, 
      clean : { 
       build : { 
        src : [ '<%=config.distFolderName%>/','apidoc/' ] 
       }, 
       pkgJson : { 
        src : ['<%= config.distFolderName %>/<%= pkg.name %>/package.json'] 
       } 
      }, 
      uglify: { 
       serverCode:{ 
        files: [{ 
         expand:true, 
         cwd:'<%= config.distFolderName %>/<%= pkg.name %>/server', 
         src:'**/*.js', 
         dest:'<%= config.distFolderName %>/<%= pkg.name %>/server' 
        }] 
       }, 
       clientCode:{ 
        files: [{ 
         expand:true, 
         cwd:'<%= config.distFolderName %>/<%= pkg.name %>/client/js/application', 
         src:'**/*.js', 
         dest:'<%= config.distFolderName %>/<%= pkg.name %>/client/js/application' 
        }] 
       }, 
       mainAppFile: { 
        files: { 
         '<%= config.distFolderName %>/<%= pkg.name %>/<%= config.appFileName %>':['<%= config.distFolderName %>/<%= pkg.name %>/<%= config.appFileName %>'] 
        } 
       } 
      }, 
      jshint:{ 
       serverCode:{ 
        files:[{ 
         expand:true, 
         cwd:'<%= config.distFolderName %>/<%= pkg.name %>/server', 
         src:'**/*.js' 
        }] 
       }, 
       clientCode:{ 
        files: [{ 
         expand:true, 
         cwd:'<%= config.distFolderName %>/<%= pkg.name %>/client/js/application', 
         src:'**/*.js' 
        }] 
       }, 
        clientTestCode:{ 
        files: [{ 
         expand:true, 
         cwd:'<%= config.distFolderName %>/<%= config.testDestFolderName %>/unit/client/js', 
         src:'**/*.js' 
        }] 
       }, 
        serverTestCode:{ 
        files: [{ 
         expand:true, 
         cwd:'<%= config.distFolderName %>/<%= config.testDestFolderName %>/server', 
         src:'**/*.js' 
        }] 
       } 
      }, 
      //mocha is used to automate unit testing of server side nodejs/express code. 
      simplemocha: { 
      options: { 
       globals: ['expect'], 
       timeout: 3000, 
       ignoreLeaks: false, 
       ui: 'bdd', 
       reporter: 'tap' 
      }, 
      all: { src: ['dist/Test/unit/server/**/*.js'] } 
     }, 
     //karma is used to automate unit testing of client side angular/javascript test cases writtin in jasmine. 
     karma: { 
      unit: { 
       configFile: 'dist/Test/unit/client/config/karma.conf.js', 
       background: false 
      } 
     }, 
     protractor: { 
        options: { 
          configFile: "protractor-config.js", //your protractor config file 
          keepAlive: true, // If false, the grunt process stops when the test fails. 
          noColor: false, // If true, protractor will not use colors in its output. 
          args: { 
           // Arguments passed to the command 
          } 
         }, 
        chrome: { 
         options: { 
           args: { 
            browser: "chrome" 
           } 
          } 
        }, 
        safari: { 
         options: { 
          args: { 
           browser: "safari" 
          } 
         } 
        }, 
        firefox: { 
         options: { 
          args: { 
           browser: "firefox" 
          } 
         } 
        } 
       }, 
     exec: { 
        generateAPIDoc : { 
         command: '<%= config.apiDocCommand %>' 
        }, 
        buildDependencies :{ 
         command: '<%= config.npmInstallCommand %>' 
        } 
      } 
    }); 

    // load our tasks 
    grunt.loadNpmTasks('grunt-contrib-copy'); 
    grunt.loadNpmTasks('grunt-contrib-clean'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-jshint'); 
    grunt.loadNpmTasks('grunt-simple-mocha'); 
    grunt.loadNpmTasks('grunt-karma'); 
    grunt.loadNpmTasks('grunt-protractor-runner'); 
    //for running executables 
    grunt.loadNpmTasks('grunt-exec'); 

    grunt.registerTask('start-server', 'Start a custom web server', function() { 
     grunt.log.writeln('Started web server on port 3000'); 
     require('./dist/ThemeLibrary/server.js'); 
    }); 

    //register the tasks 
    grunt.registerTask('build', 
      'Compiles all of the assets and copies the files to the build directory for Dev', 
      [ 'clean:build', 'clean:pkgJson','copy','exec:buildDependencies','jshint','exec:generateAPIDoc','uglify:serverCode','uglify:clientCode','uglify:mainAppFile','simplemocha','start-server', 'karma:unit'] 
    ); 
    grunt.registerTask('build-dev', 
      'Only copies the source files for Dev', 
      [ 'copy:sourceFiles','copy:mainAppFile', 'copy:testFiles', 'jshint', 'simplemocha','start-server','karma:unit'] 
    ); 
}; 

package.json

{ 
    "name": "ThemeLibrary", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
     "install": "node ./node_modules/protractor/bin/webdriver-manager update --standalone", 
     "start": "node ./dist/ThemeLibrary/server.js", 
     "start": "node ./node_modules/protractor/bin/webdriver-manager start", 
     "start": "node ./node_modules/protractor/bin/protractor ./dist/Test/integration/config/protractor-config.js" 

    }, 
    "repository": { 
    "type": "git", 
    "url": "https://devops-tools.pearson.com/stash/projects/PTL/repos/pxe_theme_library/browse/ThemeLibrary" 
    }, 
    "dependencies": { 
     "express": "*", 
     "body-parser": "*", 
     "connect-busboy": "*", 
     "cookie-parser": "*", 
     "express-session": "*", 
     "morgan": "*", 
     "ejs": "*", 
     "bcrypt-nodejs": "*", 
     "mongodb": "*", 
     "mongoskin": "*", 
     "connect-flash": "*", 
     "string": "*" 
    }, 
    "devDependencies": { 
     "grunt": "*", 
     "chai": "*", 
     "mocha": "*", 
     "karma": "*", 
     "grunt-contrib-copy": "*", 
     "grunt-contrib-clean": "*", 
     "grunt-contrib-uglify": "*", 
     "grunt-contrib-jshint": "*", 
     "grunt-simple-mocha": "*", 
     "grunt-exec": "*", 
     "karma-script-launcher": "*", 
     "karma-chrome-launcher": "*", 
     "karma-firefox-launcher": "*", 
     "karma-ie-launcher": "*", 
     "karma-jasmine": "*", 
     "karma-phantomjs-launcher": "*", 
     "karma-story-reporter": "*", 
     "grunt-karma": "*", 
     "grunt-cli": "*", 
     "karma-sauce-launcher": "*", 
     "phantomjs": "*", 
     "karma-ng-html2js-preprocessor": "*", 
     "node-inspector": "*", 
     "protractor": "0.22.0", 
     "grunt-protractor-runner": "*" 
    } 
} 

उत्तर

27

आप की जरूरत से टी "सिंगलरुन" सच है। अन्यथा यह आपकी फाइलें देखेगा और किसी भी बदलाव पर फिर से चलाएगा।

+0

धन्यवाद :-) मुझे पिछले दो हफ्तों से यह समस्या हो रही थी और खुद को समझ नहीं पाया। यह काम करता है :-) – joy

+0

हालांकि एक छोटी सी समस्या .... यह 'प्रारंभ-सर्वर' कार्य का उपयोग शुरू करने के लिए नोड सर्वर को भी मार रहा है। कर्म कार्य से बाहर निकलने का कोई तरीका है लेकिन नोड सर्वर को ऊपर रखें। – joy

+0

आपको एक अलग प्रक्रिया/टर्मिनल में स्टार्ट-सर्वर प्रक्रिया चलाना होगा। – jdewit

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

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