当Guard在监视文件中运行规范时,Rspec / Capybara“feature”方法未定义,在手动运行时有效

时间:2013-10-31 19:39:56

标签: ruby-on-rails spring rspec capybara guard

使用Guard运行我的规格时,我遇到了一个奇怪的问题。

我正在运行使用Capybara“feature”/“scenario”语法的功能规范。我也在使用Spring。

如果我在控制台中运行rspec specspring 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'

3 个答案:

答案 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才能解决问题。它也可能在错误的环境下运行(不太可能,但值得一看)。