web-dev-qa-db-ja.com

カピバラ:未定義のメソッド「訪問」

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
36
bwbrowning

私自身、この問題に遭遇しました。

したがって、これの理由は、カピバラでやや文書化されていない変更があったためです。 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

49
Eric C

ここで注意すべき点がいくつかあります。

  1. Capybara 2.0.xでの変更点はここに記載されています https://github.com/rspec/rspec-Rails/blob/master/Capybara.md 。 specディレクトリ構造に変更があります:spec/features、spec/controllers、spec/views、spec/helpers、spec/mailers。
  2. spec_helper内で明示的にCapybara dslをロードします

       require 'capybara/Rails'
       require 'capybara/rspec'
       include Capybara::DSL
18
Saurabh Bhatia

これでうまくいきました。

require 'rspec/Rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'capybara/Rails'

RSpec.configure do |config|
  config.include Capybara::DSL, :type => :request
end

これにより、仕様/リクエスト内でCapybaraのヘルパーを使用できるようになります。

8
Ananth

RSpec.configureがspec_helper.rbにカピバラDSLを含まないため

これは見苦しいソリューションですが、spec_helper.rbに追加できます。

module ::RSpec::Core
  class ExampleGroup
    include Capybara::DSL
    include Capybara::RSpecMatchers
  end
end 

このためのgitの問題:

https://github.com/rspec/rspec-Rails/issues/5

6
jwall

残念ながら、この回避策は私にはそれを行いません。私はまだ得る

NoMethodError:
   undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x007fbfeb535298>

リポジトリは以下で公開されています: https://github.com/ikusei/Goldencobra_Newsletter '28817499-subscribe'ブランチを確認する必要があります

編集:私の記述ブロック内にCapybara :: DSLを含めると、機能します。

ただし、グローバルスコープにCapybara :: DSLを含めることはお勧めしません。

良い方法がわからないので。

3
Leon Xu

Rspec 3とRailsの場合、require "Rails_helper"ではなくrequire "spec_helper"を使用していることを確認してください。

それ以外の場合は、 rspec 3&rspec-Rails および Capybara 2.0.x に対する最新の変更を確認します。

0
Matt Scilipoti

このブログ投稿は問題の修正に役立ちました: http://rubyflewtoo.blogspot.com/2012/12/Rails-32-minitest-spec-and-capybara.html

0
cbron