Javascript 如何使用Chutzpah更改基础Phantomjs对象设置?

Javascript 如何使用Chutzpah更改基础Phantomjs对象设置?,javascript,phantomjs,user-agent,qunit,chutzpah,Javascript,Phantomjs,User Agent,Qunit,Chutzpah,我们在VisualStudio中使用Chutzpah测试适配器运行了一些QunitJavaScript测试。一切都很正常,直到最近我们更改了api(js文件测试的api),并在UserAgent http头上添加了一些验证。当我试图更新测试以更改/模拟用户代理时,我意识到这甚至是不可能的 经过几天的清理,我终于发现了到底发生了什么。Chutzpah正在为要运行的测试文件创建一个对象。这是在位于的基础javascript文件(chutzpahRunner.js)上完成的。以下是文件中有效启动测试的

我们在VisualStudio中使用Chutzpah测试适配器运行了一些QunitJavaScript测试。一切都很正常,直到最近我们更改了api(js文件测试的api),并在UserAgent http头上添加了一些验证。当我试图更新测试以更改/模拟用户代理时,我意识到这甚至是不可能的

经过几天的清理,我终于发现了到底发生了什么。Chutzpah正在为要运行的测试文件创建一个对象。这是在位于的基础javascript文件(chutzpahRunner.js)上完成的。以下是文件中有效启动测试的最后几行:

...
// Allows local files to make ajax calls to remote urls
page.settings.localToRemoteUrlAccessEnabled = true; //(default false) 

// Stops all security (for example you can access content in other domain IFrames)
page.settings.webSecurityEnabled = false; //(default true)

page.open(testFile, pageOpenHandler);
...
Phatomjs支持通过在页面中指定来更改用户代理头。如果我在我的机器中编辑这个chutzpahRunner.js文件,并在那里手动设置用户代理,如下所示:

page.settings.userAgent = "MyCustomUserAgent";
我的测试又开始起作用了。问题是这不在项目本身,因此不能与团队的其他成员共享


是否可以更改Chutzpah创建的phantomjs对象的属性以运行测试?我想从我自己的测试中更改它们,或者从我可以嵌入到管道中的另一个脚本文件中更改它们。

如果没有Chutzpah中的代码更改,就不可能在PhantomJS对象上设置这些属性。请在请求此功能时提交一个问题,然后fork/patch Chutzpah添加它(或者等待项目开发人员有希望获得此功能)

更新: 我按了一个按钮。发布后,您可以在Chutzpah.json文件中使用以下内容:

{
  "userAgent": "myUserAgent"
}

叉开叉,写一个补丁。如果你做得好,也许它会被合并回来。嘿,马修。如果你仔细阅读我的文章,你会注意到我已经尝试了覆盖方法,不幸的是,它不起作用。至于你的第一个选择,我会看看我是否有一点时间将这个问题描述为项目中的一个问题,但我自己肯定无法修复它,因为我的经理不会批准我将工作时间花在它上,而且我家里没有一台工作PC。今天我做了最后一次atempt,尝试替换默认的基本模板html来生成修改后的测试工具,但我最终意识到这是徒劳的……因为我必须修改的文件被直接传递给幻影可执行文件,而我根本无法访问它。目前,我们决定删除需要依赖用户代理头的测试,然后继续。但在过程的最后我还是很难过。。。我想我花了很多时间来理解整个过程(我对javascript一开始了解很少,是一个队友离开了公司,开始设置这些测试),但最终我无能为力。既然你说没有代码更改是不可能的,我就结束这个。当我测试我在答案中输入的代码片段时,它能够更改userAgent属性。但我没有测试它是否将其发送到服务器。您确认没有吗?是的,它确实按预期更改了属性,但每个请求仍然发送了默认的用户代理。幻影不尊重它,或者在那里有一些其他的细节,只是不工作。不幸的是,我发现100%可靠的唯一方法是在页面对象上更改该属性。好的,那么最好的选择是在Chutzpah github页面上提交您的问题,希望我能找到它。