Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js GrunFile从单个grunt命令运行应用程序和模拟测试_Node.js_Gruntjs_Mocha.js_Chai_Supertest - Fatal编程技术网

Node.js GrunFile从单个grunt命令运行应用程序和模拟测试

Node.js GrunFile从单个grunt命令运行应用程序和模拟测试,node.js,gruntjs,mocha.js,chai,supertest,Node.js,Gruntjs,Mocha.js,Chai,Supertest,我有一个Node.js Express REST API应用程序可以运行。好 我有一个Mocha/Chai/Supertest模拟,用于测试上面的API应用程序。好 但我必须启动应用程序,然后独立运行模拟测试 我如何运行一个grunt命令来启动API应用程序,让它启动并运行,然后运行模拟测试 或者我是否需要以某种测试模式(通过env var)运行API应用程序,并让仅测试逻辑以某种方式调用模拟测试 我可以尝试一些东西,让它发挥作用,但好的方法是什么?(避免过度使用短语“最佳实践”)您可以使用gr

我有一个Node.js Express REST API应用程序可以运行。好

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

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

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

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


我可以尝试一些东西,让它发挥作用,但好的方法是什么?(避免过度使用短语“最佳实践”)

您可以使用grunt express server和grunt mocha test来实现这一点,您只需按如下方式设置任务:

grunt.registerTask('test', ['express:test', 'mochaTest']);
这将使用您为测试环境设置的配置运行express服务器,然后在运行
grunt测试时运行mocha

因为您使用的是supertest,所以我想您正在进行函数测试,这意味着您将使用相同的数据库进行开发和测试(如果您不是在模仿某些东西的话)。这可能会浪费时间,并使您的测试因数据错误而失败。使用两种不同的环境可以确保在运行测试时数据的状态

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


希望这有帮助

grunt concurrent可能会对此有所帮助。我用它来运行nodemon,同时观看。谢谢凯文,我会关注grunt。我还考虑在两个单独的Docker容器(基于相同的Docker映像)中运行API和模拟测试,并在Docker容器启动时执行参数化的模拟测试。然后我可以使用Docker fig运行这两个容器。听起来有点复杂,但这将是一个有用的模式供将来使用。谢谢Fouger,这看起来很有希望。我将在下周初尝试并跟进。我想知道是否存在这样的竞争条件:mochaTest可以在完全初始化并侦听请求之前尝试访问express应用程序?如果您使用并发,您可以有这种行为。如果您这样做,请查看插件的配置。Grunt一个接一个地启动任务,这样您就可以确保当Grunt运行测试时,您的服务器已经启动并运行了。这就是为什么一些聪明人创建了插件并发,以执行一些独立任务,而grunt正在执行其他任务。使用grunt express服务器和grunt mocha测试非常有效。这正是我需要的。它预测启动竞态条件问题,并支持可与regex匹配的“options output”字符串,因此模拟测试在API应用程序发出表示“API就绪”的预期字符串之前不会开始。模拟测试完成后,它还会终止API应用程序。完美的