对AJAX请求的QUnit和PhantomJS测试仅适用于代理

时间:2013-05-05 19:31:38

标签: node.js phantomjs qunit gruntjs grunt-contrib-qunit

我正在尝试使用grunt-contrib-qunit在Windows 8上使用Phantom以无头模式运行预先存在的qunit测试套件(测试解析ajax请求结果)。

在这些情况下,测试完成得很好:

  • 直接从任何浏览器访问远程页面没有 Fiddler或其他代理运行
  • 当Phantom从命令提示符运行测试时, Fiddler打开并运行

奇怪的是,如果我没有fiddler打开监视请求,我正在测试的AJAX请求似乎永远不会初始化。我已经检查了我的默认IE LAN设置,并且没有启用代理,我也尝试在那里翻转自动检测设置复选框,但没有更改。

有什么想法吗?

我的设置详情:

  • 节点v0.10.4
  • 最新grunt-contrib-qunit
  • Windows 8
  • QUnit分为4个或5个模块,在某些模块中设置和拆卸任务,异步和同步测试,自动运行设置为false。

更新

如果我关闭Fiddler中“重用客户端连接”和“重用服务器连接”中的选项,我似乎会得到与Fiddler关闭时相同的失败行为。这让我相信连接过早关闭是一个问题,所以我尝试设置一个自定义的keep-alive标头 - 但它仍然出错。

更新2:

我仍然对此问题,因为页面本身加载正常,但请求失败,但看起来这可能与NTLM身份验证有关。提琴手可能以某种方式促进握手。有open issue for NTLM on the Phantom github page

更新3:

在今晚继续进行故障排除之后,问题似乎只是对POST请求进行身份验证。 GET请求似乎工作正常。我现在正在通过ASHX处理程序路由所有请求,从而删除auth组件,从而围绕。我唯一需要改变的是在幻像上禁用Web安全性以允许跨域请求通过。

1 个答案:

答案 0 :(得分:0)

我打算说你需要关闭安全性,这是通过将--web-security=no传递给phantomjs来完成的。这将解决CORS问题。但是我在你的更新#2中看到你已经发现了这个。

对于POST身份验证问题,我在此处发布了有关解决方法的博文:   http://darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html

我听说最近的版本修好了,所以升级可能是实际的答案吗?

顺便说一下,在PhantomJS中要小心auth,因为auth详细信息是在所有请求上发送的。例如。如果您的测试页从CDN获取JQuery,则CDN将发送您的身份验证标头。 (SlimerJS有一些新功能可以解决这个问题; AFAIK PhantomJS还没有。)