[解決済み] rails で RSpec と Capybara を使用する際の未定義のメソッド `visit' について
2023-02-27 14:59:55
質問
rspecでcapybaraを動作させることができません。このようなエラーが出ます。
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
この件に関する多くの投稿があることは知っていますが、どの解決策も私にはうまくいきません。それらのほとんどは、仕様が /spec/features にないことを含んでいます - 私のはその中にあります。
まず最初に、エラーが発生しました。
$bundle exec rspec spec
F
Failures:
1) security signs users in
Failure/Error: visit "/sessions/new"
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
# ./spec/features/security_spec.rb:4:in `(root)'
Finished in 0.006 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/features/security_spec.rb:3 # security signs users in
重要なのは、最初は URL Helper 'new_sessions_path' を使っていたのですが、ずっとエラーが出ていたことです。
undefined local variable or method 'new_sessions_path'
. 私はそれが有効であることを知っているので。
$ rake routes
logout_sessions GET /sessions/logout(.:format) sessions#logout
sessions POST /sessions(.:format) sessions#create
new_sessions GET /sessions/new(.:format) sessions#new
contracts POST /contracts(.:format) contracts#create
new_contracts GET /contracts/new(.:format) contracts#new
edit_contracts GET /contracts/edit(.:format) contracts#edit
GET /contracts(.:format) contracts#show
PUT /contracts(.:format) contracts#update
DELETE /contracts(.:format) contracts#destroy
root / contracts#index
私のGemfileです。
source 'https://rubygems.org'
gem 'rails', '3.2.11'
gem 'execjs'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.1'
gem 'jruby-openssl'
gem 'therubyrhino'
gem 'kaminari'
gem 'nokogiri'
group :development do
gem 'warbler'
end
group :test do
gem 'rspec-rails'
gem 'capybara'
gem 'activerecord-jdbcsqlite3-adapter'
end
my_app/specの中にある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 'rspec/autorun'
# Capybara integration
require 'capybara/rspec'
require 'capybara/rails'
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
# Include path helpers
config.include Rails.application.routes.url_helpers
end
my_app/spec/features/security_spec.rbです。
describe "security", :type => :feature do
it "signs users in" do
visit "/sessions/new"
fill_in "username", :with => "user"
fill_in "password", :with => "pass"
click_button "Sign In"
page.should have_content('Login Successful')
end
end
上のテストに
:type => :feature
. どちらにしても違いはありません。次に何を試すべきか、何かアイデアはありますか?
どのように解決するのですか?
追加する
require 'rails_helper'
を追加することで、私の問題を解決することができました。
require 'rails_helper'
describe "security", :type => :feature do
it "signs users in" do
visit new_sessions_path
fill_in "username", :with => "user"
fill_in "password", :with => "pass"
click_button "Sign In"
page.should have_content('Login Successful')
end
end
私が見たrspecとcapybaraの例では、このrequireはなかったので、これは奇妙に思えますが、まあ、いいでしょう。問題は解決しました。
オリジナルの回答 (古いバージョンの rspec)
require 'spec_helper'
は、RSpecの古いバージョンで使用されています。より良い答えは
require 'rails_helper'
.
関連
-
[解決済み】Rails: sudo "コマンドが認識されないのはなぜですか?
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] デバイスを使用する現在のユーザーメソッド
-
[解決済み] rake db:migrateを使って1ステップだけロールバックする方法
-
[解決済み] railsアプリケーションでCookieのオーバーフロー?
-
[解決済み] railsでhidden fieldタグを使用する方法
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Railsコンソール:リロード!モデルファイルの変更が反映されない?考えられる理由は何でしょうか?
-
[解決済み] RSpecのlet()はいつ使うのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み] Railsサーバーがポートはすでに使用されていると言う、そのプロセスを殺すにはどうすればよいですか?
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] RubyとRailsの "Date.today "フォーマット
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]