#ruby-on-rails-3 #rspec #capybara #rspec2 #poltergeist
#ruby-on-rails-3 #rspec #capybara #rspec2 #полтергейст
Вопрос:
У меня есть интеграционный тест RSpec, который должен выполнить некоторый JavaScript. Я включил Poltergeist и установил PhantomJS, но всякий раз, когда я запускаю пример, я получаю эту ошибку:
Failure/Error: page.execute_script("$('form')[0].submit();")
Capybara::NotSupportedByDriverError:
Capybara::Driver::Base#execute_script
Спецификация:
require 'spec_helper'
describe "Signup", :type => :feature do
describe "workflow" do
it "ensures entry of contact information" do
visit 'signup/action'
# snip - use Capybara to fill out form elements
page.execute_script("$('form')[0].submit();")
page.should have_content("Name can't be blank")
page.should have_content("Email can't be blank")
# snip - use Capybara to fill out more form elements
page.execute_script("$('form')[0].submit();")
page.should have_content("Next page")
end
end
end
Я думаю, проблема в том, что я не уверен, как указать, что Capybara должна использовать Poltergeist в качестве своего драйвера JavaScript. В документации Poltergeist говорится:
Установка
Добавьте poltergeist в свой Gemfile, а в настройках тестирования добавьте:
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
Но в нем не указано, в какой конкретно файл он должен входить. В нем также говорится:
Настройка
Вы можете настроить способ, которым Capybara настраивает Poltegeist, с помощью следующего кода в вашей тестовой настройке:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
Но мне не ясно, нужно ли или когда мне нужно будет включить это в мои тесты. И опять же, я не уверен, куда его поместить, если мне нужно.
Чего мне не хватает?
- Куда мне нужно поместить конфигурацию для Capybara и Poltergiest, и что именно в ней нужно сказать (или как я могу определить это для себя)?
- Есть ли шаг или часть конфигурации, которую я пропустил?
Ответ №1:
Попробуйте ввести js: true
строку описания. Я знаю, что должен был сделать это для спецификаций функций в приложении на работе:
describe "Signup", :type => :feature, :js => true do
Я не вижу никакой другой конфигурации для этого. Было некоторое время назад, когда я его настраивал 🙂
Вы можете просто вызвать методы настройки драйвера Capybara один раз перед вашим блоком RSpec.configure:
Capybara.default_selector = :css
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :window_size => [1920, 1080], :phantomjs_logger => nil)
end
Capybara.javascript_driver = :poltergeist
RSpec.configure do |config|
Также обязательно используйте усечение, а не транзакцию с помощью database cleaner. Poltergeist выполняется в отдельном потоке, поэтому у вас, вероятно, будут странные проблемы с БД, если вы используете транзакционный.
Редактировать
Здесь упоминается истинная вещь js: https://github.com/jnicklas/capybara#using-capybara-with-rspec в книге «капибара читает меня».