我在浏览器(client.html)中测试时编写了我的主要单元测试,现在我准备通过 Node 设置测试自动化,但是我还没有设置 Selenium 服务器,管理层可能永远不会提供可以使用像 Sauce Labs 这样的第三方服务,所以我正在尝试使用它的 webdriver 模式通过 PhantomJS 运行实习生测试。
我正在使用以下选项运行 PhantomJS:
$ phantomjs --ignore-ssl-errors=true --web-security=false --webdriver=8910
我的实习生配置如下所示:
define({
proxyPort: 9000,
proxyUrl: 'http://localhost:9000/',
environments: [
{
browserName: 'phantom',
version: '1.9.0',
platform: 'Linux'
}
],
webdriver: {
host: 'localhost',
port: 8910
},
maxConcurrency: 3,
useSauceConnect: false,
// ...
});
它似乎在大多数情况下都有效,但是我在测试中遇到了 AJAX 请求问题。由于测试是通过 Intern 自己的服务器运行的,我添加了一个 AJAX 过滤器以确保将请求发送到正确的位置:
$.ajaxPrefilter(function (options) {
options.url = serverName + options.url;
});
但是,我仍然发现我的 AJAX 请求失败了。经过进一步检查,我发现请求没有被发送(AJAX 失败,areadyState
为 0)。PhantomJS 似乎没有提供比这更多的信息。的--web-security=false
标志phantomjs
应该确保跨域请求是可能的,所以我不确定原因。
在 PhantomJS 中没有抛出特定的错误,提供给失败处理程序的唯一信息是“错误”状态。
编辑:
我尝试在没有 jQuery 的情况下手动执行 XMLHttpRequest,并且成功。很明显,这是 jQuery 的目的。启用crossDomain
并不能修复它。