Ошибка капибары с полтергейстом и RSpec

Я пытаюсь написать простую спецификацию с Capybara, используя драйвер Poltergeist в RSpec. Кажется, нет проблемы, когда тесты должны завершиться неудачно, однако, когда я ожидаю прохождения теста, я получаю следующую ошибку:

   ~/.rbenv/versions/2.2.3/lib/
    ruby/gems/2.2.0/gems/poltergeist-1.6.0/lib/capybara/poltergeist/errors.rb:17:in 
   `initialize': wrong number of arguments (0 for 2) (ArgumentError)

Я перешел туда, где строка кода указывала на ошибку:

class JSErrorItem
      attr_reader :message, :stack

      def initialize(message, stack)
        @message = message
        @stack   = stack
      end 

      def to_s
        [message, stack].join("\n")
      end 
    end 

Но я не смог найти нигде, что я должен взаимодействовать с этим конструктором.

Это спецификация, которую я пишу

describe 'Sign Up', type: :feature do
  it 'should allow user creation through the signup form' do  
    visit new_user_url host: 'http://localhost:3000'
    within('.form') do
      fill_in('user[username]', with: 'Example')
      fill_in('user[password]', with: 'Password')
      fill_in('user[password_confirmation]', with: 'Password')
      find(".submit-button").click   
      puts page.body
      expect(page).to have_content('Welcome')
      User.last.destroy!
    end 
  end 
end

puts page печатает содержимое страницы, как и ожидалось, но после возникновения ошибки остальные строки спецификации не выполняются. Как ни странно, ошибка возникает только тогда, когда я ожидаю, что спецификация пройдет. Когда я ожидаю неудачный тест, вся спецификация выполняется без ошибок.

Мой помощник спецификации был настроен, как показано ниже:

RSpec.configure do |config|
    require 'capybara/rspec'
    require 'capybara/poltergeist'
    require 'capybara/dsl'

    Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app, time_out: 120, phantomjs_options: ['--ignore-ssl-errors=yes'], js_errors: false)
    end 

    Capybara.configure do |c| 
      c.javascript_driver = :poltergeist
      c.default_driver = :poltergeist
      c.app_host = 'http://localhost:3000'
    end 


    config.expect_with :rspec do |expectations|
      expectations.include_chain_clauses_in_custom_matcher_descriptions = true
    end 

    config.mock_with :rspec do |mocks|
      mocks.verify_partial_doubles = true
    end 
  end

person Travis Smith    schedule 21.05.2016    source источник
comment
Это вызывает ошибку, когда тест вот-вот пройдет, потому что где-то класс JsErrorItem в вашем коде инициализируется, но, поскольку в него нет ошибок (поскольку тест вот-вот пройдет), он дает вам 0 для 2 ошибка аргумента. Когда он выйдет из строя, он передает ошибки по мере необходимости. Вы можете сделать параметры необязательными в своем методе инициализации, чтобы избежать ошибочных ошибок, но это не решит проблему напрямую.   -  person bkunzi01    schedule 21.05.2016
comment
poltergeist 1.6.0 старше года - это много времени, когда дело доходит до тестирования браузера - обновитесь до 1.9.x, а также убедитесь, что вы используете phantomjs 2.1+ - затем посмотрите, есть ли у вас ошибка.   -  person Thomas Walpole    schedule 21.05.2016
comment
Похоже, это ошибка, возникающая из-за ошибки Javascript на тестируемой странице. Полтергейст по умолчанию вызывает ошибки JS, поэтому тест не проходит. Тот факт, что это внутренняя ошибка полтергейста, говорит о слишком старой версии полтергейста, как предложил @TomWalpole. Но вы также можете попытаться отключить появление ошибок JS, настроив драйвер полтергейста с помощью js_errors: false, как описано в readme.   -  person BoraMa    schedule 21.05.2016
comment
@BoraMa Помощник спецификации, указанный выше, показывает: js_errors уже имеет значение false   -  person Thomas Walpole    schedule 21.05.2016
comment
@TomWalpole Ах, извините, я пропустил это.   -  person BoraMa    schedule 21.05.2016


Ответы (1)


Я обновил Poltergeist до 1.9 и PhantomJS до 2.1, как было предложено в комментариях, и это решило проблему.

person Travis Smith    schedule 21.05.2016