неопределенный метод `use_transactional_tests=' для #‹RSpec::Core::Configuration:0x007fccf515e338› (NoMethodError)

Я тестирую новую версию Rails 5.0.0.alpha и RSpec 3.1.7, но получаю сообщение об ошибке:

undefined method `use_transactional_tests=' for #<RSpec::Core::Configuration:0x007fccf515e338> (NoMethodError)

В rails_helper.rb я обычно использую это, и все работает нормально:

config.use_transactional_fixtures = true

Но я получил это предупреждение:

DEPRECATION WARNING: use_transactional_fixtures= is deprecated and will be removed from Rails 5.0 (use use_transactional_tests= instead). (called from block in <module:FixtureSupport> at /Users/monteirobrena/.rvm/gems/ruby-2.2.2@global/gems/rspec-rails-3.1.0/lib/rspec/rails/fixture_support.rb:25)

Итак, я изменил свой rails_helper.rb, чтобы использовать новый способ:

config.use_transactional_tests = true

И теперь я получил эту ошибку:

/Users/monteirobrena/project/spec/rails_helper.rb:34:in `block in <top (required)>': undefined method `use_transactional_tests=' for #<RSpec::Core::Configuration:0x007fccf515e338> (NoMethodError)
from /Users/monteirobrena/.rvm/gems/ruby-2.2.2@global/gems/rspec-core-3.1.7/lib/rspec/core.rb:81:in `configure'
from /Users/monteirobrena/project/spec/rails_helper.rb:27:in `<top (required)>'
from /Users/monteirobrena/project/spec/controllers/messages_controller_spec.rb:1:in `require'
from /Users/monteirobrena/project/spec/controllers/messages_controller_spec.rb:1:in `<top (required)>'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `block in load_spec_files'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `each'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load_spec_files'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:96:in `setup'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:84:in `run'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:69:in `run'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:37:in `invoke'
from /Users/monteirobrena/.rvm/gems/ruby-2.2.2@global/gems/rspec-core-3.1.7/exe/rspec:4:in `<top (required)>'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/bin/rspec:23:in `load'
from /Users/monteirobrena/.rvm/rubies/ruby-2.2.2/bin/rspec:23:in `<main>'
from /Users/monteirobrena/.rvm/gems/ruby-2.2.2@global/bin/ruby_executable_hooks:15:in `eval'
from /Users/monteirobrena/.rvm/gems/ruby-2.2.2@global/bin/ruby_executable_hooks:15:in `<main>'

Любые идеи? Спасибо.


person monteirobrena    schedule 07.08.2015    source источник


Ответы (3)


Предупреждение и предложение об устаревании, которые вы получаете, исходят от Rails, а не от RSpec или драгоценного камня rspec-rails. Гем rspec-rails реализует use_transactional_fixtures= и разворачивается и вызывает тот же метод в Rails. Он не реализует use_transactional_tests=, поэтому вы получаете это сообщение об ошибке, когда вносите это изменение.

Если гем rspec-rails не будет обновлен для поддержки новых функций Rails 5, вам нужно будет установить конфигурацию Rails напрямую, а в rspec-rails 3.8 это не так.

person Peter Alfvin    schedule 07.08.2015
comment
Можете ли вы объяснить, какие строки мне нужно удалить, а какие добавить в этом случае? - person asiniy; 20.08.2015
comment
Для тех, кто нашел этот пост в 2018 году: я обновляю движок Rails 4 до Rails 5.1 и для устранения этой ошибки заменил все вхождения use_transactional_fixtures на use_transactional_tests. За исключением файла /spec/rails_helper.rb, который все еще нуждался в использовании use_transactional_fixtures. Теперь тесты RSpec выполняются успешно. - person Chris; 03.01.2018
comment
rspec 3.8 и в 2019 году — самый последний совет остается прежним — с rspec use_transactional_fixtures - person notapatch; 17.08.2019

Вам нужно продолжать использовать config.use_transactional_fixtures = true в rspec configure для бета-версии rails 5 (по крайней мере, до официального выпуска, не знаю, каковы планы команды rspec по поддержке этого ). Исправление уже находится в основной ветке, здесь это линия, исправляющая это.

Установите драгоценные камни rspec на основной ветке:

%w[rspec-core rspec-expectations rspec-mocks rspec-rails rspec-support].each do |lib|
    gem lib, git: "https://github.com/rspec/#{lib}.git", branch: 'master'
end
person Roman Kovtunenko    schedule 17.03.2016

Я обновил свою версию rspec, поэтому мне не нужно было менять строку use_transactional_fixtures. А пока есть только бета-версия:

gem 'rspec', '~> 3.5.0.beta4'
gem 'rspec-rails', '~> 3.5.0.beta4'
person Alter Lagos    schedule 14.06.2016