【问题标题】:How to get grunt.js to start an express app for testing如何让 grunt.js 启动一个 express 应用程序进行测试
【发布时间】:2013-04-07 00:35:32
【问题描述】:

我目前的情况是我使用 grunt 制作我的 express 应用程序的生产版本(最小化并合并所有 js/css,复制所有文件到位)然后我必须运行一个设置环境变量的脚本(我的应用程序仅在 TEST 模式下运行时提供测试工具),创建一个空的 Mongo 测试数据库,然后在应用程序目录上调用 npm start,然后我必须手动从 Chrome 或 Phantom 运行测试,这是我想要的要做的是让 grunt 设置环境变量并运行服务器,运行测试,然后停止服务器(将来如果一切成功,也可以部署它)。但是,当我尝试在 grunt 中运行应用程序时,它会在完成后立即停止。

我如何 grunt 启动应用程序,等到它启动后再运行测试?

【问题讨论】:

  • 您是否考虑过使用 CI 服务器而不是 grunt 来完成这些任务?
  • 最终的目标是持续集成,然后是持续部署,但构建任务取决于 grunt,因此首先让其工作是第一步。
  • 你应该检查我问的这个问题:stackoverflow.com/questions/15230090/…

标签: node.js unit-testing gruntjs


【解决方案1】:

如果您检查grunt-express,这是一个通过 grunt 快速执行网络服务器任务的插件。

快速保活

请注意,此服务器仅在 grunt 运行时运行。一次 grunt 的任务已经完成,web 服务器停止。这种行为可以 通过在您的末尾附加一个 express-keepalive 任​​务来更改 任务列表是这样的

grunt.registerTask('myServer', ['express', 'express-keepalive']);
现在,当您运行 grunt myServer 时,您的 express 服务器将保持活动状态 直到您手动终止它。

也可以通过运行grunt express express-keepalive 之类的任务来临时启用此类功能。

这种设计让您可以灵活地使用 grunt-express 与之后立即运行的另一个任务相结合,例如 grunt-contrib-qunit 插件 qunit 任务。如果我们强制快递任务 始终保持异步,这样的用例不会再发生。

来自指南grunt-contrib-qunit 包用于在无头 PhantomJS 实例中运行 QUnit 单元测试。还要注意最后一行,如果您强制 express 始终异步,那将毫无用处。

npm link for grunt-express

【讨论】:

    【解决方案2】:

    我不确定我是否正确理解了您的问题,但这可能会有所帮助:

    你知道 Grunt 的异步函数吗?一段时间以来,我使用以下方法来启动(和停止)我的 Express 应用程序。我把它和手表一起用,所以它会在保存时自动重启。在这种情况下,您必须将手表的 nospawn 选项设置为 true。

    var server = null;
    grunt.registerTask('server', 'Start server', function() {
      var done = this.async();
      if (server !== null) {
        server.close();
        clearCache();
      }
      var app = require('./my-express-app.js');
      server = http.createServer(app).listen(app.get('port'), function(){
        done();
      });
    });
    
    function clearCache() {
      for (key in require.cache) {
        if (key.indexOf(__dirname + '/node_modules/') == -1) {
          delete require.cache[key];
        }
      }
    }
    

    因为这个 require-cache-hack 很难看。但是,它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 2018-10-26
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      相关资源
      最近更新 更多