ruby on rails 3 - 未定义的方法`has_content?' for“HomePages”:String

时间:2013-02-25 20:39:01

标签: ruby-on-rails-3 rspec capybara rspec2 rack-test

我是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)>'

请帮助我,我搜索一下,看到类似的问题,但不是很好..加上他们有点老了,以前的bug不是现在。

加上如果你可以向我解释为什么我不能使用visit命令(对于RSpec :: Core :: ExampleGroup :: Nested_1也是未定义的方法`visit')并且必须使用get命令它会很棒

3 个答案:

答案 0 :(得分:2)

如果你使用而不是 expect(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

答案 1 :(得分:0)

我相信你正在寻找rspec的have_content()http://rubydoc.info/github/jnicklas/capybara/master/Capybara/RSpecMatchers

更改行:{should have_contact(“Home”)}

to:it {should have_content(“Home”)}

希望这会有所帮助

答案 2 :(得分:0)

方法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

请参阅this blog post了解原因。