Capybara: добавление js: true в спецификацию объектов приводит к FrozenError: невозможно изменить замороженную строку - PullRequest
1 голос
/ 31 мая 2019

ruby '~> 2.6.1' rails 5.2.3

У меня есть спецификация функции, которая требует выполнения некоторого javascript для заполнения поля alt средства выбора даты.

spec:

require 'rails_helper'
Capybara.default_driver = :selenium
Capybara.javascript_driver = :selenium

RSpec.feature "Guest user creates a new order", js: true do

  scenario "order is valid" do
    area = create(:coverage_area)
    visit root_path

    click_on "Book Now"

    fill_in "zipcode", with: "98168"

    page.execute_script('document.querySelector(".datepicker").value = "9/20/2020"')
    .
    .
    .
  end

end

Я точно определил, что включение js:true в моей спецификации функций немедленно вызывает следующую ошибку при первом действии сценария:

1) Guest user creates a new order order is valid
     Failure/Error: visit root_path

     FrozenError:
       can't modify frozen String
`block (2 levels) in <top (required)>'

My Gemfile:

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'rspec-rails'
  gem 'rails-controller-testing'
  gem 'guard-rspec'
end


group :test do
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  gem 'webdrivers', '~> 4.0'
  gem "database_cleaner"
  gem "factory_girl_rails"
  gem "shoulda-matchers"
end

My spec_helper.rb

require 'simplecov'
require 'webdrivers'
.
.
.

После некоторого исследования я узнал, что капибара по умолчанию использует rack test driver, который не поддерживает javascript, однако, выполнив шаги по настройке капибары для использования :selenium дляэтот тест спецификации не влияет на ошибку.

1 Ответ

1 голос
/ 14 июня 2019

YMMV, но для нас с коллегой переустановка firefox и geckodriver https://github.com/mozilla/geckodriver/releases работала для нас.

...