Rspec&capybaraでスペックを実行すると、カピバラの訪問方法が見つかりません。他に必要な初期化手順はありますか?
$bundle exec rspec spec
/home/brian/projects/expense_track/expense_track/spec/requests/homepage_spec.rb:6:in `block (2 levels) in <top (required)>': undefined method `visit' for #<Class:0xb6572b8> (NoMethodError)
Gemfile:
group :test, :development do
gem "rspec-Rails"
gem "capybara"
end
私のspec_helper.rbの先頭:
# This file is copied to spec/ when you run 'Rails generate rspec:install'
ENV["Rails_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/Rails'
require 'capybara/rspec'
require 'rspec/autorun'
homepage_spec.rb:
require 'spec_helper'
describe "The home page" do
context "home page exists" do
visit "/"
page.should have_content("elephants")
end
end
私自身、この問題に遭遇しました。
したがって、これの理由は、カピバラでやや文書化されていない変更があったためです。 Capybaraは、それを使用するものはすべてspec/features
フォルダーにある必要があると想定し、適切な想定を行います。 spec/requests
フォルダに残っているものはすべて機能しなくなります。回避策はありますが。
コンテキストブロックの場合、パラメーター:type => :feature
を追加すると、この問題が修正されます。または、仕様の先頭にあるdescribe
メソッドの名前をfeature
に変更できます。それも変更する必要があります。
彼らはGoogleグループでこの変更を発表しました: https://groups.google.com/forum/?fromgroups=#!topic/Ruby-capybara/5KfxezI-U0Q
特に、CapybaraがRSpecでスペックを実行すると想定している:typeを:featureに変更しました(以前は:requestでした)。仕様/機能の最新リリース。別の方法として、Capybara Feature DSL(describeの代わりに機能)を使用することもできます。これは、追加の微調整なしで機能するはずです。未定義のメソッド訪問などのエラーが表示される場合は、おそらくこの問題が発生しています。モジュールを:request specsに含める場合は、おそらく:featureに変更する必要があります。
これはgithubの問題でさらに議論されました: https://github.com/jnicklas/capybara/issues/814
ここで注意すべき点がいくつかあります。
require 'capybara/Rails'
require 'capybara/rspec'
include Capybara::DSL
これでうまくいきました。
require 'rspec/Rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'capybara/Rails'
RSpec.configure do |config|
config.include Capybara::DSL, :type => :request
end
これにより、仕様/リクエスト内でCapybaraのヘルパーを使用できるようになります。
RSpec.configureがspec_helper.rbにカピバラDSLを含まないため
これは見苦しいソリューションですが、spec_helper.rbに追加できます。
module ::RSpec::Core
class ExampleGroup
include Capybara::DSL
include Capybara::RSpecMatchers
end
end
このためのgitの問題:
残念ながら、この回避策は私にはそれを行いません。私はまだ得る
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x007fbfeb535298>
リポジトリは以下で公開されています: https://github.com/ikusei/Goldencobra_Newsletter '28817499-subscribe'ブランチを確認する必要があります
Rspec 3とRailsの場合、require "Rails_helper"
ではなくrequire "spec_helper"
を使用していることを確認してください。
それ以外の場合は、 rspec 3&rspec-Rails および Capybara 2.0.x に対する最新の変更を確認します。
このブログ投稿は問題の修正に役立ちました: http://rubyflewtoo.blogspot.com/2012/12/Rails-32-minitest-spec-and-capybara.html