0

我在浏览器(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并不能修复它。

4

1 回答 1

1

所以,由于我还没有完全弄清楚的原因,在 AJAX 配置中使用method而不是type解决了这个问题(我偶然发现了这个问题)。我不太明白为什么,因为method它只是typejQuery 中的别名:

s.type = options.method || options.type || s.method || s.type;

无论如何,这确实为我解决了这个问题。

于 2013-05-23T20:45:57.293 回答