我正在更新 Rails 3.2 LTS 项目的托管,将它们从 ruby 2.3.3 升级到 2.7.2。
作为其中的一部分,我更新了一些宝石,特别是更新
- 从 5.11.3 到 5.14.3 的最小测试
- 水豚从 1.1.2 到 2.18.0
- 应该匹配器从 1.0.0 到 2.1.0
- shoulda-context 从 1.0.0 到 1.2.2
我提到所有这些,因为我现在有两个失败的测试,它们在更改之前通过了。
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'
它们都指向同一个文件中的两个测试,看起来像这样
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
如前所述,这个测试之前通过了,所以我猜其中一个宝石发生了一些变化,但我不知道是什么,或者如何修复它。
我的test_helper.rb
文件在下面
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'
谢谢你。