カピバラをrspecで動作させることはできません。それは私にこのエラーを与えます:
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ヘルパー「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 'spec_helper'
は、RSpecの古いバージョンで使用されます。より良い答えはrequire 'Rails_helper'
です。
追加してみてください:
config.include Capybara::DSL
構成ブロックに。
# 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'
# 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
config.include Capybara::DSL
end
Capybara 2.0ではフォルダ仕様/機能を使用する必要があるため、Capybaraコマンドはフォルダ仕様/リクエストでは機能しなくなりました。
すべてのセットアップをbefore
ブロックで実行してみてください。
spec/features/security_spec.rb
describe "security" do
before do
visit "/sessions/new"
fill_in "username", :with => "user"
fill_in "password", :with => "pass"
click_button "Sign In"
end
it "signs users in" do
page.should have_content('Login Successful')
end
end
この問題もありました
機能の上部にrequire 'Rails_helper'を追加すると、問題が修正されました。
require 'Rails_helper'
RSpec.describe "Products", type: :request do
describe "GET /products" do
it "display tasks" do
Product.create!(:name => "samsung")
visit products_path
page.should have_content("samsung")
#expect(response).to have_http_status(200)
end
end
end
Rails_helper.rbに「config.include Capybara :: DSL」を追加します
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.include Capybara::DSL
end