Почему я получаю "undefined метод или переменную" пример "в RSpec 3.0?

После обновления до RSpec 3.0 я получил следующее сообщение:

 Failure/Error: Unable to find matching line from backtrace
 NameError:
   undefined local variable or method `example' for #<RSpec::ExampleGroups::Anonymous:0x007f9ae985b548>

Сообщение сохранялось даже после сокращения спецификации до следующего:

describe "" do
  it "" do
  end
end

Я заметил, что capybara находился около вершины стека, как показано ниже:

 # /Users/palfvin/.rvm/gems/[email protected]/gems/capybara-2.1.0/lib/capybara/rspec.rb:20:in `block (2 levels) in <top (required)>'

в случае, если это помогает.

Ответы

Ответ 1

Эта ошибка возникает при установке RSpec 3.0.0.beta при продолжении запуска Capybara 2.1.0. Если вы установите Capybara 2.2.0.beta, ошибка исчезнет.

Ответ 2

У меня была аналогичная проблема с крюком before.

Кажется, что RSpec < 3 предоставил объект example в каждом крючке, например:

config.before(:each) do
  if example.metadata[:js] # <--- this fails!
    # do something
  end
end

В RSpec >= 3 вам нужно передать явный примерный параметр в блок:

config.before(:each) do |example| # <--- see here!
  if example.metadata[:js]
    # do something
  end
end

Ответ 3

Для некоторых несвязанных причин я не смог обновить Capybara, поэтому я использую этот патч обезьяны (добавьте файл в spec/support):

module Capybara
  module DSL
    def example
      RSpec.current_example
    end
  end
end

Ответ 4

У меня была такая же ошибка, но не в Capybara, но в моих характеристиках. Я нашел и заменил example. на RSpec.current_example., и теперь он работает. Кажется, example теперь RSpec.current_example.

Ответ 5

Они работали на меня, используя Ruby2/Rails4/RSpec3.0.0.beta и Capybara2.2.0.beta: ruby 2.0.0p353 (версия 2013-11-22 43784) [x86_64-linux]

  • Gemfile

    
    ...
    gem 'rails', '4.0.1'
    group :development, :test do
       gem 'rspec-rails','~>3.0.0.beta' 
       gem 'factory_girl_rails' 
    end                                                                                                                                 

    group :test do gem 'faker' gem 'capybara', ' > =2.2.0.beta' gem 'guard-rspec' gem 'launchy' end

  • введите спецификации Capybara в спецификации/функции, а не спецификации/запросы.

  • Отметьте все группы примеров, в которых вы хотите использовать Capybara, с:

    describe "Users", :type => :feature do
      ...
    end
    
  • Добавьте следующую строку в spec_helper.rb: require 'capybara/rspec' и добавьте DSL в блок RSpec.config

    RSpec.configure do |config| block ... config.include Capybara::DSL