Zombie.js с Бехатом и Минком

У меня была проблема за проблемой заставить Behat работать с Zombie.js. Проблема, с которой я столкнулся сейчас, на самом деле связана с модулем Zombie.js (раньше ошибки были в связи между ними).

Ошибка выглядит так.

  [RuntimeException]                                                                                                                                   
  Server process has been terminated: (8) [                                                                                                            
  url.js:107                                                                                                                                           
      throw new TypeError("Parameter 'url' must be a string, not " + typeof url)                                                                       
            ^                                                                                                                                          
  TypeError: Parameter 'url' must be a string, not undefined                                                                                           
      at Url.parse (url.js:107:11)                                                                                                                     
      at urlParse (url.js:101:5)                                                                                                                       
      at Object.urlResolve [as resolve] (url.js:405:10)                                                                                                
      at History._resolve (/Users/nathanielh/www/website/node_modules/zombie/lib/zombie/history.coffee:201:20)                                         
      at History._assign (/Users/nathanielh/www/website/node_modules/zombie/lib/zombie/history.coffee:209:18)                                          
      at /Users/nathanielh/www/website/node_modules/zombie/lib/zombie/browser.coffee:326:30                                                            
      at Browser.withOptions (/Users/nathanielh/www/website/node_modules/zombie/lib/zombie/browser.coffee:105:14)                                      
      at Browser.visit (/Users/nathanielh/www/website/node_modules/zombie/lib/zombie/browser.coffee:320:12)                                            
      at Socket.eval (eval at <anonymous> (/private/var/folders/fv/fp4xrfnx7kzfq2bqzywq5p9w00010f/T/mink_nodejs_serverSZBH0W:43:10), <anonymous>:2:9)  
      at Socket.<anonymous> (/private/var/folders/fv/fp4xrfnx7kzfq2bqzywq5p9w00010f/T/mink_nodejs_serverSZBH0W:43:5)                                   
  ]                                                                                                                                                    

Я обнаружил, что в history.coffee функция resolve пытается использовать несуществующий элемент массива.

  // history.coffee
  _resolve: (url)->
    if url
      return URL.resolve(@_stack[@_index]?.url, url)
    else # Yes, this could happen
  return @_stack[@_index]?.url

Эта ссылка на @_stack[@_index] разрешается в undefined, которая затем передается в URL.resolve, что затем вызывает ошибку.

Любая идея, почему это произойдет?

Обновлять

Я заметил, что @_stack пусто, а @_index равно -1. Это не должно быть возможно, верно?


person Nathaniel    schedule 26.07.2013    source источник
comment
Какую версию nodejs вы используете?   -  person Rob Squires    schedule 29.07.2013


Ответы (2)


Драйвер зомби не работает с версией узла 0.8.24 (0.8.23 работает нормально). Я считаю, что это связано с изменением:

2013.06.04, Version 0.8.24 (maintenance), c1a1ab067721ea17ef7b05ec5c68b01321017f05

* url: Properly parse certain oddly formed urls (isaacs)

Похожее изменение (сделанное в тот же день), по-видимому, было сделано в 0.10.10 (хотя я не изучал коммиты напрямую).

2013.06.04, Version 0.10.10 (Stable), 25e51c396aa23018603baae2b1d9390f5d9db496

* url: Properly parse certain oddly formed urls (isaacs)

Я бы рекомендовал вернуться к 0.8.23 или 0.10.9, чтобы это заработало. Если вы еще не используете его, я рекомендую nvm для управления установками вашего узла.

person Rob Squires    schedule 31.07.2013

Та же проблема при попытке имитировать $nodeElement->mouseOver() с помощью Mink/Behat/Symfony2.1.

TypeError: Parameter 'url' must be a string, not object
    at Url.parse (url.js:107:11)
    at urlParse (url.js:101:5)
    at Object.urlResolve [as resolve] (url.js:405:10)
    at Object.iframe.setAttribute (/usr/lib/node_modules/zombie/lib/zombie/jsdom_patches.js:164:43)
    at attrCopy (/usr/lib/node_modules/zombie/node_modules/jsdom/lib/jsdom/level1/core.js:331:14)
    at Object.core.Node.cloneNode (/usr/lib/node_modules/zombie/node_modules/jsdom/lib/jsdom/level1/core.js:636:18)
    at Object.core.Node.cloneNode (/usr/lib/node_modules/zombie/node_modules/jsdom/lib/jsdom/level1/core.js:706:37)
    at Function.jQuery.extend.clone (/js/2225e47_jquery-1.8.2_2.js:6222:17)
    at Function.jQuery.extend.parseHTML (/js/2225e47_jquery-1.8.2_2.js:501:31)
    at jQuery.fn.jQuery.init (/js/2225e47_jquery-1.8.2_2.js:131:24)
    at jQuery (/js/2225e47_jquery-1.8.2_2.js:44:10)
    in /js/45a7194_jquery.jqModal_9.js

Версия узла v0.10.15. Все еще ищу ответы.

person Cristian Sitov    schedule 31.07.2013