5

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

我正在运行一个使用 Capybara“功能”/“场景”语法的功能规范。我也在使用弹簧。

如果我在控制台或rspec specGuard shell 中运行,一切正常。但是,当监视的规范由 Guard 自动运行时,我收到以下错误:spring rspecrspec

/spec/features/navigation_spec.rb:1:in <top (required)>': undefined methodfeature' for main:Object (NoMethodError)

为什么它不只在这个特定的上下文中使用 Capybara 语法?

以下是相关代码:

保护文件

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'
4

3 回答 3

24

For anyone who may run into a similar issue in the future, I forgot to include require 'spec_helper' in the feature spec (like an idiot).

于 2013-11-01T07:06:28.723 回答
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_helperrails_helper那里。

于 2014-09-23T13:07:06.690 回答
0

你是如何调用守卫的?听起来你可能需要做bundle exec guard一些事情才能开始。它也可能在错误的环境下运行(不太可能,但值得一看)。

于 2013-10-31T21:00:43.043 回答