7

rspec と capybara を使用して新しい Rails 3.2.9 アプリに取り組んでいます。

Gemfile には次のものがあります。

gem 'rspec-rails'
gem 'capybara'

そして、spec/spec_helper.rb の以下:

require 'rspec/rails'
require 'capybara/rspec'

そして、spec/requests/asdf_spec.rb:

require 'spec_helper'
describe 'Asdf' do
  describe "GET /asdfs" do
    it "should list asdfs" do
      visit asdfs_path
    end
  end
end

このテストは失敗しています:

Failure/Error: visit asdfs_path
NoMethodError:
 undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x007fa7b68961a0>
# ./spec/requests/asdfs_spec.rb:19:in `block (4 levels) in <top (required)>'

Capybara が読み込まれていないようです。ええ、どうしてですか?これとまったく同じことを何十回もやったような気がします...おそらく何かばかげたことをブランクにしました。

4

3 に答える 3

13

つまり、カピバラバージョン2の変更でした。私はこれを見つけました:

http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

説明:

capybara 2.0にアップグレードすると、デフォルトではRSpecリクエストスペックでcapybaraを使用できなくなります。代わりに、新しいタイプの仕様(機能仕様)がcapybaraで使用するために作成されました。

capybara 2.0にアップグレードするには、いくつかのことを行う必要があります。

  • rspec-railsを2.12.0以降にアップグレードします
  • capybaraを使用するテストをspec/requestsからspec/featuresに移動します。Capybaraテストはvisitメソッドを使用し、通常はページに対してアサートします。
于 2012-12-06T18:12:55.203 に答える
3

Capybara の へのアップグレードで同じ問題を抱えている人のための追加情報です2.xUpgrading to Capybara 2セクションの rspec-rails ドキュメントを確認してください。

spec/features基本的に、Capybara DSL (ページ & 訪問) を使用するには、既存の仕様をディレクトリに移動する必要があります。page & visitしたがって、受け入れテストでのみ使用できます。コントローラーとリクエスト仕様でのページと訪問はもうありません。(get|post|put|delete|head/response.body)コントローラーおよび要求仕様では、ラックテスト DSL のみが許可されます。

これは推奨されませんが、仕様をそのまま機能させる方法があります。

RSpec.configure do |c|
  c.include Capybara::DSL, :example_group => {
    :file_path => "spec/requests"
  }
end

ドキュメントには、このルートに進むと、意図した動作が無効になり、リスクを負うことになると記載されています。

また、これを にアップグレードしない理由にしないでCapybara 2.xください。機能仕様は慣れやすく、読みやすいです。featureは のエイリアスでdescribeあり、は、for 、およびbackgroundのエイリアスです。beforescenarioitgivenlet

これが、新しい変更に混乱している人の助けになることを願っています。

于 2013-06-14T19:54:20.533 に答える
-3

問題はカピバラの宝石そのものにあります。

gem 'capybara', '1.1.2' この問題を解決します(バージョン2.0.xは失敗します)

于 2012-12-06T16:40:05.067 に答える