2014-10-03 73 views
0

我有一个可以工作的Node.js Express REST API应用程序。好。Gruntfile从单个grunt命令运行应用程序和模拟测试

我有一个Mocha/Chai/Supertest模拟测试上面的API应用程序。好。

但我必须启动应用程序,然后独立运行模拟测试。

如何运行一个启动API应用程序的grunt命令,让它启动并运行,然后运行模拟测试?

或者是否需要以某种测试模式(通过env var)运行API应用程序,并且只有测试逻辑以某种方式调用模拟测试?

我可以尝试一些事情,并得到一些工作,但什么是好方法? (避免过度使用的短语“最佳实践”。)

+0

咕噜并发可能有助于此。我用它来运行nodemon并同时观看。 – 2014-10-03 22:20:38

+0

谢谢凯文,我会调查一下grunt并发。我也在考虑在两个独立的Docker容器(基于相同的Docker镜像)中运行API和模拟测试,并在Docker容器启动时执行参数化的模拟测试。然后我可以使用Docker运行这两个容器。听起来有点复杂,但它将是未来使用的有用模式。 – jfathman 2014-10-04 12:46:25

回答

0

你可以做到这一点与咕噜-Express的服务器和呼噜声,摩卡测试,你将探微必须设置你的任务象下面这样:

grunt.registerTask('test', ['express:test', 'mochaTest']); 

这将使用您为测试环境设置的配置运行快速服务器,然后在运行grunt test时运行摩卡。

由于您使用的是超级特性,我认为您正在进行功能测试,这意味着您将使用相同的数据库进行开发和测试(如果您不是在嘲笑某些东西)。这可能是时间流失,并且由于数据不好而使测试失败。使用两种不同的环境可以确保运行测试时的数据状态。

如果您不想手动执行,仍然可以使用grunt手表插件重新启动文件更改的测试。

希望这会有帮助

+0

谢谢Fougere,这看起来很有希望。我会在下周初尝试并跟进。我想知道是否存在mochaTest可以尝试在完全初始化并侦听请求之前访问快速应用程序的竞争条件? – jfathman 2014-10-04 22:13:07

+0

如果你使用并发,你可以有这种行为,查看插件的配置。 Grunt一个接一个地执行任务,所以你可以确定,当grunt运行测试时,服务器已经启动并运行。这就是为什么一些聪明的人创建插件并发,到一些独立的任务,而咕噜做一些其他人。 – Fougere 2014-10-05 09:46:47

+0

使用grunt-express-server和grunt-mocha-test很好。只是我需要的东西。它预期启动竞争条件的关注,并支持可选择正则表达式匹配的“选项输出”字符串,以便模拟测试不会开始,直到API应用程序发出表示“API就绪”的预期字符串。它也会在模拟测试完成后终止API应用程序。完善。 – jfathman 2014-10-06 15:44:14

相关问题