Reputation: 6671
I'm in the process of updating the hosting for a Rails 3.2 LTS project, taking them from ruby 2.3.3 to 2.7.2.
As part of this I've updated a few gems, specifically updating
I mention all this, because I've now got two failing tests, which were passing before the changes.
Error: test_: as a logged in user who has picked a location with an existing current visit when requesting the edit visit page should show the clinical coronal balance section. (VisitsControllerTest): NameError: undefined local variable or method `page' for #<VisitsControllerTest:0x0000558981845048>
test/functional/visits_controller_test.rb:97:in `block (4 levels) in <class:VisitsControllerTest>'
test/functional/visits_controller_test.rb:109:in `instance_exec'
test/functional/visits_controller_test.rb:109:in `block in create_test_from_should_hash'
Error: test_: as a logged in user who has picked a location with an existing current visit when requesting the edit visit page should show the clinical sagittal balance section. (VisitsControllerTest): NameError: undefined local variable or method `page' for #<VisitsControllerTest:0x0000558981844dc8>
test/functional/visits_controller_test.rb:122:in `block (4 levels) in <class:VisitsControllerTest>'
test/functional/visits_controller_test.rb:134:in `instance_exec'
test/functional/visits_controller_test.rb:134:in `block in create_test_from_should_hash'
These are both pointing to two tests within the same file, which look like this
should "show the clinical coronal balance section" do
assert page.has_table? 'clinicalassessment'
assert page.has_selector? 'td', :text => "Coronal Balance\n(mm)", :count => 1
assert page.has_selector? 'td', :text => 'S1-T1 (Global)', :count => 2
assert page.has_field? 'clinical_assessment_permutation_with_brace_pre_adjustment_coronal_balance_global_negative', :count => 1
# snip
end
should "show the clinical sagittal balance section" do
assert page.has_table? 'clinicalassessment'
assert page.has_selector? 'td', :text => "Sagittal Offset\n(mm)", :count => 1
assert page.has_selector? 'td', :text => "Wall to Foot Template", :count => 1
assert page.has_selector? 'td', :text => "Wall to S1", :count => 1
assert page.has_selector? 'td', :text => "Wall to T1", :count => 2 # this matches T1
# snip
end
As mentioned, this test was passing before, so I'd guess something has changed in one of the gems, but I don't know what, or how to fix it.
My test_helper.rb
file is below
ENV["RAILS_ENV"] = "test"
require 'minitest/autorun'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'sidekiq/testing/inline'
require 'capybara/rails'
require 'capybara/minitest'
User.work_factor = 4
class ActiveSupport::TestCase
include ActionDispatch::TestProcess
self.use_transactional_fixtures = true
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
# Add more helper methods to be used by all tests here...
# raise "remove workaround" if Shoulda::VERSION > "2.11.3"
unless defined?(Test::Unit::AssertionFailedError)
class Test::Unit::AssertionFailedError < ActiveSupport::TestCase::Assertion
end
end
def assert_false(expected_to_be_false, message = "")
assert !expected_to_be_false, message
end
alias deny assert_false
end
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
# Make `assert_*` methods behave like Minitest assertions
include Capybara::Minitest::Assertions
# Reset sessions and driver between tests
# Use super wherever this method is redefined in your individual test classes
def teardown
Capybara.reset_sessions!
Capybara.use_default_driver
end
end
class Minitest::Test
def page
Capybara::Node::Simple.new(@response.body)
end
end
require 'mocha/setup'
Thank you.
Upvotes: 1
Views: 549
Reputation: 49870
You're including Capybara::DSL into ActionDispatch::IntegrationTest which should make page
available in any tests derived from that class. Since you're getting that page
is undefined it would imply that whatever class those tests are derived from (it's not shown in your question) is not ActionDispatch::IntegrationTest
On a side note - I would be surprised if Capybara 2.18 doesn't have some issues with Ruby 2.7 (at the very least a ton of warnings)
Upvotes: 1