PhantomJs超时

时间:2013-05-30 21:56:46

标签: timeout jasmine phantomjs

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

在我的典型测试案例中,我拨打服务电话,等待回复并确认回复。

有些请求可能会在几秒钟后返回,有些请求可能需要一分钟才能返回。

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

有趣的是,测试在通过Firefox时通过。

我尝试过查看tcpdump,并且两个浏览器的请求标题相同,所以这看起来像浏览器超时问题。

有没有人有类似的问题?关于何时可以配置超时的任何想法?或者你认为问题是别的什么?

2 个答案:

答案 0 :(得分:1)

PhantomJS的痛苦啊。

显然我发现我使用的是PhantomJS不支持的javascript bind功能。 这导致测试失败,导致某些全局变量(我的错)的状态变得混乱,从而导致失败。

但根本原因是使用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;
  };
}

答案 1 :(得分:1)

我有完全相同的问题。您所要做的就是添加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
 });