2015-08-07 8 views
4

Я тестирует новые Rails версии 5.0.0.alpha и RSpec 3.1.7, но я получаю сообщение об ошибке:неопределенный метод `use_transactional_tests =» для # <RSpec :: Основной :: Конфигурация: 0x007fccf515e338> (NoMethodError)

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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/bin/ruby_executable_hooks:15:in `eval' 
from /Users/monteirobrena/.rvm/gems/[email protected]/bin/ruby_executable_hooks:15:in `<main>' 

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

ответ

6

Предупреждение об утомлении и предложение, которое вы получаете, относятся к Rails, а не к RSpec или драгоценному камню rspec-rails. Драгоценный камень rspec-rails реализует use_transactional_fixtures= и поворачивается и вызывает тот же метод в Rails, за https://github.com/rspec/rspec-rails/blob/3-3-maintenance/lib/rspec/rails/fixture_support.rb. Он не реализует use_transactional_tests=, поэтому вы получаете это сообщение об ошибке при внесении изменений.

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

+2

Можете ли вы объяснить, какие строки мне нужно удалить, а какие строки мне нужно добавить в этом случае? – asiniy

+1

Для тех, кто находит это сообщение в 2018 году: я обновляю Rails 4 Engine до Rails 5.1 и для решения этой ошибки я заменил все вхождения «use_transactional_fixtures» на «use_transactional_tests». За исключением внутри /spec/rails_helper.rb, которому все еще нужны «use_transactional_fixtures». Тесты RSpec теперь успешно выполняются. – Chris

1

Вы должны продолжать использовать config.use_transactional_fixtures = True в RSpec настроит для рельсов 5 беты (по крайней мере, до официального релиза, не уверен, каковы RSpec планов команды на поддержку этого). Исправление уже на главной ветви, here is the line fixing it.

Установите на 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 
0

Я обновил свой Rspec версию, так что у меня не было необходимости менять свою use_transactional_fixtures линию. В то же время есть только бета-версия:

gem 'rspec', '~> 3.5.0.beta4' 
gem 'rspec-rails', '~> 3.5.0.beta4' 

 Смежные вопросы

  • Нет связанных вопросов^_^