ruby on rails 3 - неопределенный метод has_content? для "Домашних страниц": Строка
Я новичок в ruby, и я только начинаю свой первый проект. когда я пытаюсь запустить свой первый тест через rspec, я не смог.
это мой гемфайл:
source 'https://rubygems.org'
gem 'rails', '3.2.12'
gem 'bootstrap-sass', '2.3.0.1'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.1.2'
gem 'will_paginate', '3.0.4'
gem 'bootstrap-will_paginate', '0.0.9'
gem 'jquery-rails', '2.2.1'
gem 'mysql2'
#gem 'execjs'
gem 'therubyracer', :platforms => :ruby
# Dev and test gems
group :development, :test do
gem 'rspec-rails', '2.13.0'
gem 'guard-rspec', '2.4.1'
gem 'guard-spork', '1.4.2'
gem 'spork', '0.9.2'
end
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '3.2.6'
gem 'coffee-rails', '3.2.2'
gem 'uglifier', '1.3.0'
end
#only test gems
group :test do
gem 'capybara', '2.0.2'
gem 'factory_girl_rails', '4.2.1'
gem 'cucumber-rails', '1.3.0', :require => false
gem 'database_cleaner', '0.9.1'
# gem 'launchy', '2.1.0'
# gem 'rb-fsevent', '0.9.1', :require => false
# gem 'growl', '1.0.3'
end
group :production do
gem 'pg', '0.12.2'
end
и вот мой home_pages_spec.rb
require 'spec_helper'
describe "HomePages" do
before { get 'home_page/home'}
it { should have_content("Home")}
end
когда я бегу
bundle exec rspec spec/requests/home_pages_spec.rb
я получил
Failures:
1) HomePages
Failure/Error: it { should have_content("Home")}
NoMethodError:
undefined method `has_content?' for "HomePages":String
# ./spec/requests/home_pages_spec.rb:5:in `block (2 levels) in <top (required)>'
Пожалуйста, помогите мне, я немного искал и увидел похожую проблему, но не так, как надо. Плюс они были довольно старые, и то, что раньше было ошибкой, сейчас нет.
плюс, если вы можете объяснить мне, почему я не могу использовать команду посещения (также неопределенный метод `посещение 'для RSpec::Core::ExampleGroup::Nested_1...) и использовать команду get, это будет здорово
3 ответа
Метод get
из rspec-rails
, и это позволяет нам сделать это:
specify { response.should have_content("Foo") }
Метод visit
из capybara
, и это позволяет нам сделать это:
specify { page.should have_content("Foo") }
Эти методы были доступны для всех спецификаций в spec/requests
, но в Capybara 2.0 они были разделены. Теперь мы размещаем интеграционные тесты Capybara в spec/features
,
Пожалуйста, посмотрите этот пост в блоге, чтобы узнать, почему это было сделано.
Если вы используете его вместо ожидаемого (page).to, вы должны объявить, что это такое:
describe "HomePages" do
before { get 'home_page/home'}
subject { page }
it { should have_content("Home")}
end
или вы можете просто сделать:
describe "HomePages" do
before { get 'home_page/home'}
expect(page).to have_content('Home')
end
Я полагаю, что вы ищете rspec's have_content () http://rubydoc.info/github/jnicklas/capybara/master/Capybara/RSpecMatchers
изменить строку: он {должен иметь_контакт ("Домой")}
to: it {should have_content ("Home")}
надеюсь это поможет