3

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

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

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

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

有什么想法吗??

关于我的设置的详细信息:

  • 节点 v0.10.4
  • 最新的grunt-contrib-qunit
  • 视窗 8
  • QUnit 分为 4 或 5 个模块,部分模块中有 setup 和 teardown 任务,异步和同步测试,autorun 设置为 false。

更新:

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

更新 2:

我仍然对此提出质疑,因为页面本身加载正常,但请求失败,但看起来这可能与 NTLM 身份验证有关。Fiddler 可能会以某种方式促进握手。Phantom github 页面上有一个未解决的 NTLM 问题。

更新 3:

在今晚继续进行故障排除后,问题似乎仅与 POST 请求的身份验证有关。GET 请求似乎工作正常。我现在正在通过 ASHX 处理程序路由所有请求并因此删除 auth 组件来解决这个问题。我唯一需要改变的是禁用幻像上的网络安全以允许跨域请求通过。

4

1 回答 1

0

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

对于 POST 身份验证问题,我在这里写了关于解决方法的博客:http: //darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html

我听说最新版本已经解决了这个问题,所以升级可能是实际的答案?

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

于 2013-11-19T04:03:18.613 回答