重新启动节点并运行测试

斯图尔特·阿姆布雷希特

有谁知道每次文件更改后自动重新启动节点并在重新启动后运行测试的最佳解决方案?

我目前正在将grunt-contrib-watch与grunt-develop一起使用。我在某些重新启动时收到ECONNREFUSED错误。我认为这是因为我的测试在服务器完全联机之前正在运行。

关于如何最好地实现我想要的任何想法?

我想要的是:重新启动节点,然后在每个文件更改后运行所有集成测试。

斯图尔特·阿姆布雷希特

我正在采用BDD方法来进行黄瓜(相对于常规单元测试)的测试。我想确保针对我正在构建的API进行的每个测试都是在应用程序的全新启动时启动的。

我想到了。这是我使用的:

  1. grunt-contrib-watch监视文件更改。
  2. 依次调用
    1. grunt-develop重新启动应用程序
    2. grunt-cucumberjs运行黄瓜测试

然后,我修改了index.js(启动应用程序),以便如果将NODE_ENV设置为测试,它就不会启动应用程序。这样,黄瓜测试实际上可以启动服务器,并且可以等到启动过程完成后再运行测试。

这是GruntFile和Index文件:

Gruntfile.js

/*jslint node: true */
"use strict";
module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    env: {
      dev: {
        APP_DIR_FOR_CODE_COVERAGE: 'coverage/instrument/',
        NODE_ENV: 'dev',
        PORT: 8080
      },
      test: {
        APP_DIR_FOR_CODE_COVERAGE: 'coverage/instrument/',
        NODE_ENV: 'test',
        PORT: 8081
      },
      coverage: {
        APP_DIR_FOR_CODE_COVERAGE: 'coverage/instrument/',
        NODE_ENV: 'test',
        PORT: 8081
      }
    },
    watch: {
      js: {
        files: [
          'index.js',
          'features/**/*.js',
          'server/**/*.js'
        ],
        tasks: ['develop', 'cucumberjs', 'jshint'],
        options: {
          nospawn: true
        }
      }
    },
    jshint: {
      all: ['Gruntfile.js', 'index.js', 'server/**/*.js', 'features/**/*.js']
    },
    nodemon: {
      dev: {
        script: 'index.js'
      }
    },
    cucumberjs: {
      src: './features',
    },
    develop: {
      server: {
        file: 'index.js'
      }
    },
    instrument: {
      files: ['index.js', 'server/**/*.*'],
      options: {
        lazy: true,
        basePath: 'coverage/instrument/'
      }
    },
    storeCoverage: {
      options: {
        dir: 'coverage'
      }
    },
    makeReport: {
      src: 'coverage/coverage.json',
      options: {
        type: 'lcov',
        dir: 'coverage/reports',
        print: 'detail'
      }
    },
    coverage: {
      options: {
        thresholds: {
          'statements': 90,
          'branches': 90,
          'lines': 90,
          'functions': 90
        },
        dir: 'coverage',
        root: ''
      }
    }
  });

  grunt.loadNpmTasks('grunt-env');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-develop');
  grunt.loadNpmTasks('grunt-cucumber');
  grunt.loadNpmTasks('grunt-istanbul');
  grunt.loadNpmTasks('grunt-istanbul-coverage');
  grunt.loadNpmTasks('grunt-nodemon');
  grunt.loadNpmTasks('grunt-contrib-jshint');

  grunt.registerTask('default', ['env:dev', 'nodemon']);
  grunt.registerTask('test', ['env:test', 'watch']);
  grunt.registerTask('testcoverage', ['env:test', 'jshint', 'instrument', 'cucumberjs', 'storeCoverage', 'makeReport', 'coverage']);

};

Index.js

/*jslint node: true */
"use strict";
var Hapi = require('hapi');
var Good = require('good');
var server = {};

exports.server = {
    start: function(callback) {
        /* istanbul ignore next */
        var port = process.env.PORT || 8080;

        server = new Hapi.Server(port);

        var routes = require('./server/routes');
        routes.register(server);

        var exceptionHandling = require('./server/exceptionHandling');
        exceptionHandling.register(server);

        server.pack.register(Good, function(err) {
            /* istanbul ignore if */
            if (err) {
                throw err; // something bad happened loading the plugin
            }
            /* istanbul ignore next */
            server.log('info', 'Server starting at ' + server.info.uri);
            server.start(callback);
        });
    },
    stop: function(callback) {
        server.log('info', 'Server stopping.');
        server.stop(null, callback);
    },
    rootUrl: function() { return server.info.uri; }
};

/* istanbul ignore if */
if (process.env.NODE_ENV != 'test') {
    exports.server.start(function() {});
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章