Why is Rspec saying “Failure/Error: Unable to find matching line from backtrace”?

蓝咒 提交于 2019-11-26 18:12:55

问题


I'm following the rails tutorial here: http://railstutorial.org/chapters/filling-in-the-layout#top

When I run "rspec spec/", I get a bunch of errors that look like this:

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

But when I go in my web browser to localhost:3000/ and localhost:3000/contact, the pages are there and the correct titles are there. Here is my myrailsroot\spec\requests\layout_links_spec.rb file:

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

Any ideas would be great, thanks


回答1:


This is due to a bug in RSpec 2.0.0.beta.19. If you use 2.0.0.beta.18 as the tutorial suggests, it will work fine. Just change whatever version you have in your Gemfile to beta 18, bundle install and run the tests again.

Here's the relevant parts from my 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

Also note that Spork can also cause problems like this from time to time. If you get inexplicable test failures, especially if you just added new controllers or actions, go give spork a kick. Hit Ctrl-C and run the spork server again.




回答2:


my gemfile looked like this and it works

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

where rspec-rails (2.1.0)

however following doesn't:

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

So I think it is webrat plays up.




回答3:


I upgraded to beta.20 which is now out. Had to add webrat into my gemfile and do another bundle install. In the gemfile, it looks like this:

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

Cheers




回答4:


I am only seeing this issue for two of my title tests.

My gemfile is as follows...

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

I've tried the betas for rspec-rails as well, to no avail.

The two of the titles that are still giving me errors are the following:

From 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

The snippet from the errors reads:

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>

and

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>

respectively.

As seen by the output, "Sign Up" and "Index" are clearly shown to the right of the title. This is particularly perplexing in that, the following test does work:

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

Which is for the same page and contains the same title as the other "Sign Up" test. Also the get method works in this test but not in the "Index" test.

Help?




回答5:


This doesn't seem to be an issue as of rspec 2.2.0




回答6:


I can confirm that the following Gemfile works correctly...

group :test do
  gem 'rspec', '2.0.0.beta.18'
  gem 'spork', '0.8.4'
  gem 'webrat', '0.7.1'
end



回答7:


I GOT IT WORKING

W__A__Y__! more information than what you need, but for what it's worth, this 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

... after I run ...

$ bundle install

... and ...

$ bundle update webrat

... results in this ... bundle ...

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)

... which got all of the sample application tests (through the end of Chapter 5) to run again.




回答8:


I was still seeing this issue until I specified webrat 0.7.1.




回答9:


The following fixed the problem for me.

gem install rspec-rails
sudo apt-get install libxslt-dev libxml2-dev
bundle install
rails generate rspec:install



回答10:


haha, restarting spork and autotest did the trick. it does need a nice kick every now and then. i'm running rspec-rails 2.6.1 btw...




回答11:


"Kicked" Spork and fixed the problem for me.



来源:https://stackoverflow.com/questions/3517724/why-is-rspec-saying-failure-error-unable-to-find-matching-line-from-backtrace

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!