我在浏览器(client.html)中测试时编写了我的主要单元测试,现在我已准备好通过Node设置测试自动化,但是我还没有设置Selenium服务器,管理层将会可能永远不会给像Sauce Labs这样的第三方服务,所以我试图通过PhantomJS使用它的webdriver模式进行Intern测试。
我正在使用以下选项运行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失败,readyState
为0)。 PhantomJS似乎没有提供比这更多的信息。 --web-security=false
的{{1}}标志应该确保跨域请求是可能的,因此我不确定原因。
PhantomJS中没有抛出任何特定错误,给失败处理程序的唯一信息是“错误”状态。
修改
我尝试过没有jQuery的手动XMLHttpRequest,它运行成功。很明显这是jQuery的结尾。启用phantomjs
无法解决问题。
答案 0 :(得分:1)
所以,由于我还没有想到的原因,在AJAX配置中使用method
代替type
解决了这个问题(我偶然发现了这个问题)。我不明白为什么,因为method
只是jQuery中type
的别名:
s.type = options.method || options.type || s.method || s.type;
无论如何,这确实为我解决了这个问题。