如何让grunt.js启动一个快速的应用程序进行testing

我目前的情况是,我用grunt来制作我的快速应用程序的生产版本(最小化和合并所有js / css,复制所有文件到位),然后我必须运行一个脚本,设置一个环境variables(我的应用程序只在TEST模式下运行testing工具),创build一个空的Mongotesting数据库,然后在应用程序目录中调用npm start,然后我手动运行Chrome或Phantom的testing,我想要做的是grunt设置环境variables并运行服务器,运行testing,然后停止服务器(将来如果所有的都成功了,最好也部署它)。 但是,当我尝试在咕噜声中运行该应用程序时,一旦完成,它就会停止。

我该如何让grunt启动应用程序,等待启动,然后运行testing?

如果你通过grunt检查grunt-express是一个快速web服务器任务的插件。

快车存活

请注意,此服务器只在运行grunt时才运行。 一旦咕噜的任务完成,Web服务器停止。 这个行为可以通过在你的任务列表末尾附加一个express-keepalive任务来改变

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

这种function也可以通过运行像grunt express express-keepalive这样的任务来grunt express express-keepalive

这个devise让你可以灵活地使用grunt-express和另一个立即运行的任务,比如grunt-contrib-qunit plugin qunit任务。 如果我们强迫任务总是asynchronous的话,这种用例就不会再发生了。

从指南grunt-contrib-qunit软件包用于在无头PhantomJS实例中运行QUnitunit testing。 还要介意最后一行,如果你强迫expression总是asynchronous的,那就没用了。

npm 链接为grunt-express

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

你知道Grunt的asynchronousfunction吗? 有一段时间我用下面的方法开始(和停止)我的快速应用程序。 我用手表,所以它自动重新启动保存。 在这种情况下,您必须将watch的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]; } } } 

这是因为这个需求caching黑客丑陋。 但是,它的工作。