使用Guard运行我的规格时,我遇到了一个奇怪的问题。
我正在运行使用Capybara“feature”/“scenario”语法的功能规范。我也在使用Spring。
如果我在控制台中运行rspec spec
或spring rspec
或在Guard shell中运行rspec
,那么一切正常。但是,当看到的规格由Guard自动运行时,我收到以下错误:
对于main:Object(NoMethodError)/spec/features/navigation_spec.rb:1:in
<top (required)>': undefined method
feature'
为什么不在这个特定的背景下才接受Capybara语法?
以下是相关代码:
GuardFile
guard :rspec, :spring => true do
watch(%r{^spec/.+_spec\.rb$})
end
规格/特征/ navigation_spec.rb
feature "navigation" do
context "When on the home page" do
before { visit "/" }
scenario "I should see the navigation header" do
expect(page).to have_selector("div.navigation")
end
end
end
规格/ spec_helper.rb
require 'capybara/rspec'
答案 0 :(得分:23)
对于任何可能在将来遇到类似问题的人,我忘了在功能规范中加入require 'spec_helper'
(就像白痴一样)。
答案 1 :(得分:12)
在Rails 4中,请确保您已在规范文件中包含'rails_helper'
而不是'spec_helper'
:
require 'rails_helper'
feature "Some Feature", :type => :feature do
..
end
并确保config.disable_monkey_patching!
被注释掉或删除。否则,在运行功能规范时会遇到问题。
require 'capybara/rspec'
RSpec.configure do |config|
..
# config.disable_monkey_patching!
..
end
如果您在项目目录中创建了.rspec文件,请务必同时将spec_helper
更改为rails_helper
。
答案 2 :(得分:0)
你是如何援引守卫的?听起来你可能需要做bundle exec guard
才能解决问题。它也可能在错误的环境下运行(不太可能,但值得一看)。