PhantomJs timeout



我使用Jasmine和PhantomJS来运行测试用例。

在我的典型测试用例中,我发出一个服务调用,等待响应并确认响应。

有些请求可以在几秒钟内返回,有些则需要一分钟才能返回。

在运行PhantomJS时,测试用例失败,因为服务调用应该花费一分钟(失败是因为尚未收到响应)。

有趣的是,测试通过了Firefox。

我试着看tcpdump和头是相同的请求通过两个浏览器,所以这看起来像一个浏览器超时问题。

有人遇到过类似的问题吗?任何想法,在哪里可以配置超时?还是你认为问题出在别的地方?

啊,PhantomJS的痛苦。

显然,事实证明,我是使用javascript的bind函数,这是不支持在PhantomJS。这导致测试失败,导致一些全局变量的状态混乱(我的错),因此失败。

但根本原因是使用bind

解决方案:尝试从https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind获得bind这样的垫片

if (!Function.prototype.bind) {
  Function.prototype.bind = function (oThis) {
    if (typeof this !== "function") {
      // closest thing possible to the ECMAScript 5 internal IsCallable function
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    }
    var aArgs = Array.prototype.slice.call(arguments, 1), 
        fToBind = this, 
        fNOP = function () {},
        fBound = function () {
          return fToBind.apply(this instanceof fNOP && oThis
                                 ? this
                                 : oThis,
                               aArgs.concat(Array.prototype.slice.call(arguments)));
        };
    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();
    return fBound;
  };
}

我也有同样的问题。你所要做的就是在exit

中添加setTimeout
 setTimeout(function() {phantom.exit();},20000); // stop after 20 sec ( add this before you request your webpage )
 page.open('your url here', function (status) {
  // operations here
 });

相关内容

  • 没有找到相关文章