为什么我在RSpec 3.0中得到“未定义的方法或变量'示例'”?

时间:2013-12-06 00:06:34

标签: rspec capybara

升级到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

我确实注意到水豚位于堆栈顶部附近,如下所示:

 # /Users/palfvin/.rvm/gems/ruby-2.0.0-p247@botmetrics/gems/capybara-2.1.0/lib/capybara/rspec.rb:20:in `block (2 levels) in <top (required)>'

如果有帮助。

5 个答案:

答案 0 :(得分:22)

我遇到了与before挂钩类似的问题。

似乎RSpec&lt; 3在每个钩子中都提供了一个example对象,如下所示:

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

在RSpec&gt; = 3中,您必须将明确的示例参数传递给块:

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

答案 1 :(得分:11)

在继续运行Capybara 2.1.0的同时安装RSpec 3.0.0.beta会导致此错误。如果您安装Capybara 2.2.0.beta,错误将消失。

答案 2 :(得分:3)

由于一些无关的原因我无法升级Capybara,所以我使用这个猴子补丁(在spec / support中添加一个文件):

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

答案 3 :(得分:2)

我有同样的错误,不是在Capybara,而是在我的规格中。我找到example.找到并替换为RSpec.current_example.,现在就可以了。似乎example现在是RSpec.current_example

答案 4 :(得分:1)

这些使用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