Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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 如何从NodeJS/Express web应用程序运行CasperJS/PhantomJS测试?_Node.js_Express_Phantomjs - Fatal编程技术网

Node.js 如何从NodeJS/Express web应用程序运行CasperJS/PhantomJS测试?

Node.js 如何从NodeJS/Express web应用程序运行CasperJS/PhantomJS测试?,node.js,express,phantomjs,Node.js,Express,Phantomjs,问题重述: 我们如何通过运行NodeJS/Express/AngularJS的web应用动态触发、运行CasperJS/PhantomJS测试并从中获取结果 背景和调查: 在这个问题之前,我想说,我知道围绕这个问题也有类似的问题,我已经尽力在阅读/理解方面做了尽职调查 我相信我的问题有点不同,因为我理解由于各种原因,phantomj和nodej不能天生地一起工作。有许多项目试图在NodeJ和PhantomJ之间架起“桥梁”。经常出现的是 然而,正如该应用程序的作者所指出的,存在着无数的问题,Ph

问题重述:

我们如何通过运行NodeJS/Express/AngularJS的web应用动态触发、运行CasperJS/PhantomJS测试并从中获取结果

背景和调查:

在这个问题之前,我想说,我知道围绕这个问题也有类似的问题,我已经尽力在阅读/理解方面做了尽职调查

我相信我的问题有点不同,因为我理解由于各种原因,phantomj和nodej不能天生地一起工作。有许多项目试图在NodeJ和PhantomJ之间架起“桥梁”。经常出现的是

然而,正如该应用程序的作者所指出的,存在着无数的问题,PhantomJS的首席开发人员(我相信)已经表示他们不会支持NodeJS

明白了。然而,有很多测试运行者似乎提供了NodeJS集成和利用PhantomJS。例如,GruntJS可以利用MochaJS测试,而MochaJS又可以调用JasmineJS,显然可以通过PhantomJS利用JasmineJS

挑战/优势

我不想测试我的webapp,这似乎是社区中大多数教程和问题围绕的唯一用例。我的用例正在测试其他网站,它们已经在进行web应用程序的正确集成

为此,我有一个完整的NodeJS/Express/AngularJS应用程序,它是一个基于web的测试和报告套件,我想集成CasperJS/PhantomJS测试结果。我希望能够动态地将URL从AngularJS前端传递到我的NodeJS/Express服务器,然后触发CasperJS/PhantomJS测试,并以可以包含在AngularJS报告前端的方式返回结果

通过从节点调用单独的进程来解决潜在问题

虽然我现在找不到它,但我已经看到了调用一个“命令”来生成一个单独的进程来从NodeJS运行PhantomJS的参考。这是实现我的目标的最佳方式吗(如果可能的话,我不想使用NodeJS/PhantomJS桥,告诉我我是否思想太封闭)

通过摩卡咖啡的潜在解决方案 visionmedia.github.io/mocha/

我看过Mocha,他们的口号是“Mocha是一个在node.js和浏览器上运行的功能丰富的JavaScript测试框架”,这看起来很有希望。但是,他们没有提供任何将这些测试融入像我这样的动态web应用程序的例子。他们总是假设你正在测试你的应用程序,并且你将在你的应用程序之外运行一系列测试,而不是像我打算做的那样从你的应用程序内部运行

摩卡咖啡的这一部分看起来特别有前景。看来我可以在我的前端使用它来触发我的摩卡测试,对吗

提前感谢您的帮助!我对测试还很陌生,所以我的头在这里游动了一些

[编辑] 相关问题,不能100%回答我的问题


是的,使用可能是最好的选择,即使您需要不断更新测试过程。但是我们在这里谈论的是什么样的测试呢?您说您只想给出一个要测试的URL,然后服务器将结果返回给前端。那么,您是否不希望为该特定站点运行脚本?每个站点只有一个(通用)测试脚本?顺便说一句,PhantomJS/CasperJS还用于清理或自动化内容,而不仅仅用于测试。@ArtjomB。谢谢你的评论。我没有在这些网站上做大量的UI测试。我想看看是否加载了特定的资源(JS文件),是否存在某些DOM元素,如果存在,是否可见。我还通过resource.requested(CasperJS)和abort()在远程站点上加载/不加载JS脚本的情况下执行此操作。所以“是的”,有一个脚本正在运行,最好是用CasperJS编写的,这是一个针对通过前端传递的任何站点URL的通用测试运行。我知道CasperJS getHTML()和getPageContent(),尽管它们仍然要求能够从我的应用程序加载PhantomJS。我看起来最后一个链接()很好地回答了你的问题。少了什么?@ArtjomB。是的,这是我要尝试的解决方案。然而,我希望找到一种利用摩卡的方法,因为我注意到它支持浏览器。那是你可以跟他说话的吗?使用我的测试应用程序为每个用户生成多个子进程的想法似乎。。。考虑到内存问题和线程,有问题吗?我不能谈论mocha,但您链接到的浏览器支持似乎是关于直接在浏览器中运行的mocha测试,但可能我理解错了。即使您使用一些从浏览器中抽象出来的框架,您仍然需要为每个用户提供多个进程,因为引擎盖下(无头)浏览器处理cookie,从而处理会话。如果您不关心多个用户是否共享一个会话,那么您可以编写一个脚本,对所有用户只使用一个浏览器进程。我只是不认为这在mocha这样的测试框架中是可能的。