angularjs gruntjs karma-runner

angularjs - Mi prueba de unidad de karma se ejecutó pero no se detuvo(usando un gruñido)



gruntjs karma-runner (1)

Estoy ejecutando Karma para ejecutar casos de prueba de unidad usando Grunt. Se está ejecutando perfectamente bien, pero el proceso de Karma no se detiene automáticamente después de completar la ejecución de la prueba. Sin error / sin registro. Los siguientes son detalles sobre la configuración y el archivo gruñido.

karma-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''] ); };

paquete.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": "*" } }


Necesitas establecer "singleRun" en true. De lo contrario, verá sus archivos y se ejecutará de nuevo en cualquier cambio.