неопределенный метод "визит" при использовании RSpec и Capybara в rails



Я не могу заставить капибару работать с rspec. Это дает мне эту ошибку:



undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>


Я знаю, что есть много постов об этом, но не работает для меня. Большинство из них включают спецификации, которые не входят в /spec/features - which mine is in.



первая ошибка:



$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


spec_helper.rb внутри my_app / spec:



# 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.рубидий:



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. Это не имеет никакого значения в любом случае. Есть идеи, что я должен попробовать дальше?

561   5  

5 ответов:

попробуйте добавить:

  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

добавлять 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, не требовал этого, но хорошо. Проблема решена.

оригинальный ответ (более старые версии rspec)

require 'spec_helper' используется более старыми версиями RSpec. Лучшим ответом будет require 'rails_helper'.

поскольку Capybara 2.0 нужно использовать folder spec / features команды Capybara больше не работают в папке spec/requests.

попробуйте выполнить все настройки в before блок:

spec/features / security_spec.РБ

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

и добавить ' config.включите Capybara:: DSL' в rails_helper.РБ

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

Comments

    Ничего не найдено.