2016-05-21 5 views
0

Я пытаюсь написать простую спецификацию с Capybara, используя драйвер Poltergeist в RSpec. Там, кажется, не будет проблемой, когда тесты должны потерпеть неудачу, однако, когда я ожидаю прохождения теста, я получаю следующее сообщение об ошибке:Ошибка Capybara с Полтергейст и 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 

The 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 
+0

Ошибка при запуске теста, потому что где-то инициализируется класс JsErrorItem в вашем коде, но поскольку в него нет ошибок (потому что тест вот-вот пройдет), он дает вам 0 для ошибки 2 аргументов. Когда он будет терпеть неудачу, он пропускает ошибки по мере необходимости. Вы могли бы сделать параметры необязательными в вашем методе инициализации, чтобы избежать ошибок errononeous, но это не решило бы проблему напрямую. – bkunzi01

+0

Полтергейст 1.6.0 старше года - это долгое время, когда дело доходит до тестирования браузера - до версии 1.9.x, а также убедитесь, что вы используете phantomjs 2.1+, - тогда проверьте, есть ли у вас ошибка –

+0

Это, по-видимому, ошибка, которая возникает как ошибка Javascript на тестируемой странице. Полтергейст по умолчанию повышает JS-ошибки, поэтому тест терпит неудачу. Тот факт, что это вместо этого внутренняя ошибка полтергейста, говорит о слишком старой версии полтергейста, которую предложил @TomWalpole. Но вы также можете попытаться отключить повышение ошибок JS, настроив драйвер poltergeist с помощью 'js_errors: false', как описано в [readme] (https://github.com/teampoltergeist/poltergeist#customization). – BoraMa

ответ

1

я модернизировал Полтергейст до 1,9 и PhantomJS до 2.1, как предложено в комментариях и исправили проблему.