升级到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)>'
如果有帮助。
答案 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