Mike Ray
Mike Ray

Reputation: 91

Capybara: Adding js: true to feature spec causes FrozenError: Can't modify frozen string

ruby '~> 2.6.1' rails 5.2.3

I have a feature spec that requires executing some javascript in order to populate a an alt field of a datepicker.

the 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

I've pinpointed that enabling js:true on my feature spec immediately causes the following error on the first scenario action:

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'
.
.
.

After some research, I learned that capybara uses rack test driver by default which doesn't support javascript, however going through the steps of configuring capybara to use :selenium for this spec test has no effect on the error.

Upvotes: 2

Views: 743

Answers (1)

rjspotter
rjspotter

Reputation: 87

YMMV but, for my coworker and I reinstalling firefox and geckodriver https://github.com/mozilla/geckodriver/releases worked for us.

Upvotes: 1

Related Questions