30

我在这里关注rails教程:http ://railstutorial.org/chapters/filling-in-the-layout#top

当我运行“rspec spec/”时,我得到一堆看起来像这样的错误:

1) LayoutLinks should have a Home page at '/'
    Failure/Error: Unable to find matching line from backtrace
    stack level too deep
    # C:/Ruby19/lib/ruby/1.9.1/forwardable.rb:185

2) LayoutLinks should have a Contact page at '/contact'
    Failure/Error: Unable to find matching line from backtrace
    stack level too deep
    # C:/Ruby19/lib/ruby/1.9.1/forwardable.rb:185

但是当我在我的网络浏览器中访问 localhost:3000/ 和 localhost:3000/contact 时,页面就在那里,并且正确的标题也在那里。这是我的 myrailsroot\spec\requests\layout_links_spec.rb 文件:

require 'spec_helper'

describe "LayoutLinks" do

  it "should have a Home page at '/'" do
    get '/'
    response.should have_selector('title', :content => "Home")
  end

  it "should have a Contact page at '/contact'" do
    get '/contact'
    response.should have_selector('title', :content => "Contact")
  end

  it "should have an About page at '/about'" do
    get '/about'
    response.should have_selector('title', :content => "About")
  end

  it "should have a Help page at '/help'" do
    get '/help'
    response.should have_selector('title', :content => "Help")
  end

  it "should have a signup page at '/signup'" do
    get '/signup'
    response.should have_selector('title', :content => "Sign up")
  end

end

任何想法都会很棒,谢谢

4

11 回答 11

14

这是由于 RSpec 2.0.0.beta.19 中的一个错误。如果您按照教程的建议使用 2.0.0.beta.18,它将正常工作。只需将 Gemfile 中的任何版本更改为 beta 18,捆绑安装并再次运行测试。

这是我的 Gemfile 中的相关部分。

group :development do
  gem 'rspec-rails', '2.0.0.beta.18'
end

group :test do
  gem 'rspec-rails', '2.0.0.beta.18'
  gem 'spork', '0.8.4'
end

另请注意,Spork 有时也会导致此类问题。如果你遇到莫名其妙的测试失败,特别是如果你刚刚添加了新的控制器或动作,那就去踢一下 spork。点击 Ctrl-C 并再次运行 spork 服务器。

于 2010-08-22T09:25:43.060 回答
9

我的 gemfile 看起来像这样,它可以工作

group :test do 
    gem 'rspec-rails'
    gem 'webrat', '0.7.1'
end

其中 rspec-rails (2.1.0)

但是以下不是:

group :test do 
    gem 'rspec-rails'
    gem 'webrat', '0.7.2'
end

所以我认为这是webrat发挥了作用。

于 2010-11-09T22:55:34.110 回答
3

我升级到了 beta.20,它现在已经发布了。必须将 webrat 添加到我的 gemfile 中并进行另一个捆绑安装。在 gemfile 中,它看起来像这样:

group :test do
  gem "webrat"
  gem 'rspec', '2.0.0.beta.20'
end

干杯

于 2010-08-31T00:38:38.250 回答
1

我只在我的两个标题测试中看到了这个问题。

我的gemfile如下...

source 'http://rubygems.org'

gem 'rails', '3.0.0'
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'
gem 'gravatar_image_tag', '0.1.0'
gem 'will_paginate', '3.0.pre2'

group :development do
  gem 'rspec-rails', '2.0.0.rc'
  gem 'webrat', '0.7.1'
  gem 'annotate-models', '1.0.4'
  gem 'faker', '0.3.1'
end

group :test do
  gem 'rspec', '2.0.0.rc'
  gem 'webrat', '0.7.1'
  gem 'spork', '0.8.4'
  gem 'factory_girl_rails', '1.0'
end

我也尝试了 rspec-rails 的测试版,但无济于事。

仍然给我错误的两个标题如下:

来自 users_controller_spec.rc

  it "should have the right title" do
    get :index
    response.should have_selector("title", :content => "All users")
  end

  #...

    it "should have the right title" do
      post :create, :user => @attr
      response.should have_selector("title", :content => "Sign up")
    end

错误的片段如下:

Failures:
  1) UsersController GET 'index' for signed-in users should have the right title
     Failure/Error: response.should have_selector("title", :content => "All users")
     expected following output to contain a <title>All users</title> tag:
     <!DOCTYPE html>
     <html>
     <head>
     <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
     <title>Ruby on Rails Tutorial Sample App | All Users</title>

2) UsersController Post 'create' for non-signed in users failure should have the right title
     Failure/Error: response.should have_selector("title", :content => "Sign up")
     expected following output to contain a <title>Sign up</title> tag:
     <!DOCTYPE html>
     <html>
     <head>
     <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
     <title>Ruby on Rails Tutorial Sample App | Sign Up</title>

分别。

从输出中可以看出,“注册”和“索引”清楚地显示在标题的右侧。这尤其令人困惑,因为以下测试确实有效:

  it "should have the right title" do
    get :new
    response.should have_selector("title", :content => "Sign up")
  end

这是针对同一页面的,并且包含与其他“注册”测试相同的标题。get 方法也适用于此测试,但不适用于“索引”测试。

帮助?

于 2010-11-08T19:46:43.933 回答
1

我可以确认以下 Gemfile 工作正常...

group :test do
  gem 'rspec', '2.0.0.beta.18'
  gem 'spork', '0.8.4'
  gem 'webrat', '0.7.1'
end
于 2011-05-02T19:25:52.250 回答
1

从rspec 2.2.0开始,这似乎不是问题

于 2010-11-29T02:26:48.410 回答
1

我得到了它的工作

方法__!比您需要的信息更多,但对于它的价值,这个 Gemfile ...

source 'http://rubygems.org'

gem 'rails', '3.0.3'

# Bundle edge Rails instead: <br/>
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3-ruby', :require => 'sqlite3'

# Use unicorn as the web server<br/>
# gem 'unicorn'

# Deploy with Capistrano<br/>
# gem 'capistrano'

# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)<br/>
# gem 'ruby-debug'<br/>
# gem 'ruby-debug19'

# Bundle the extra gems:<br/>
# gem 'bj'<br/>
# gem 'nokogiri'<br/>
# gem 'sqlite3-ruby', :require => 'sqlite3'<br/>
# gem 'aws-s3', :require => 'aws/s3'<br/>

# Bundle gems for the local environment. Make sure to<br/>
# put test-only gems in this group so their generators<br/>
# and rake tasks are available in development mode:<br/>
# group :development, :test do<br/>
#   gem 'webrat'<br/>
# end<br/>
group :test, :development do<br/>
gem 'rspec-rails', '2.0.0.beta.18'<br/>
# gem 'capybara'<br/>
gem 'webrat', '0.7.1'<br/>
gem 'database_cleaner'<br/>
gem 'cucumber-rails'<br/>
gem 'cucumber'<br/>
gem 'spork'<br/>
gem 'launchy'<br/>
end

...在我跑步之后...

$ bundle install

... 和 ...

$ bundle update webrat

...导致这个...捆绑...

Using rake (0.8.7) <br/>
Using abstract (1.0.0) <br/>
Using activesupport (3.0.3) <br/>
Using builder (2.1.2) <br/>
Using i18n (0.5.0) <br/>
Using activemodel (3.0.3) <br/>
Using erubis (2.6.6) <br/>
Using rack (1.2.1) <br/>
Using rack-mount (0.6.13) <br/>
Using rack-test (0.5.7) <br/>
Using tzinfo (0.3.23) <br/>
Using actionpack (3.0.3) <br/>
Using mime-types (1.16) <br/>
Using polyglot (0.3.1) <br/>
Using treetop (1.4.9) <br/>
Using mail (2.2.14) <br/>
Using actionmailer (3.0.3) <br/>
Using arel (2.0.7) <br/>
Using activerecord (3.0.3) <br/>
Using activeresource (3.0.3) <br/>
Using bundler (1.0.7) <br/>
Using configuration (1.2.0) <br/>
Using diff-lcs (1.1.2) <br/>
Using json (1.4.6) <br/>
Using gherkin (2.3.3) <br/>
Using term-ansicolor (1.0.5) <br/>
Using cucumber (0.10.0) <br/>
Using cucumber-rails (0.3.2) <br/>
Using database_cleaner (0.6.0) <br/>
Using launchy (0.3.7) <br/>
Using nokogiri (1.4.4) <br/>
Using thor (0.14.6) <br/>
Using railties (3.0.3) <br/>
Using rails (3.0.3) <br/>
Using rspec-core (2.4.0) <br/>
Using rspec-expectations (2.4.0) <br/>
Using rspec-mocks (2.4.0) <br/>
Using rspec (2.4.0) <br/>
Using webrat (0.7.1) <br/>
Using rspec-rails (2.0.0.beta.18) <br/>
Using spork (0.8.4) <br/>
Using sqlite3-ruby (1.3.2)

...这使所有示例应用程序测试(直到第 5 章结束)再次运行。

于 2011-01-17T18:56:49.180 回答
0

哈哈,重新启动 spork 和自动测试就可以了。它确实需要时不时地踢一脚。我正在运行 rspec-rails 2.6.1 顺便说一句...

于 2011-11-01T04:20:44.447 回答
0

以下为我解决了这个问题。

gem install rspec-rails
sudo apt-get install libxslt-dev libxml2-dev
bundle install
rails generate rspec:install
于 2011-04-13T15:25:43.540 回答
0

“踢”Spork 并为我解决了问题。

于 2012-02-29T14:08:44.093 回答
0

在我指定 webrat 0.7.1 之前,我仍然看到这个问题。

于 2010-11-07T21:55:13.477 回答