Ruby-on-rails 为什么 Rspec 会说“失败/错误:无法从回溯中找到匹配的行”?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3517724/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 23:04:24  来源:igfitidea点击:

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

ruby-on-railsrubyruby-on-rails-3rspecautotest

提问by Chris

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

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

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

当我运行“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

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:

但是当我在我的网络浏览器中访问 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

Any ideas would be great, thanks

任何想法都会很棒,谢谢

采纳答案by AboutRuby

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.

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

Here's the relevant parts from my Gemfile.

这是我的 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.

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

回答by Jing

my gemfile looked like this and it works

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

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

where rspec-rails (2.1.0)

其中 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.

所以我认为这是 webrat 的表现。

回答by Chris

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:

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

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

Cheers

干杯

回答by E. Sambo

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

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

回答by Vern McGeorge

I GOT IT WORKING

我搞定了

W__A__Y__! more information than what you need, but for what it's worth, this Gemfile ...

道路__!比你需要的更多的信息,但对于它的价值,这个 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.

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

回答by Steve

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

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

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

回答by Paul Pettengill

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

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

My gemfile is as follows...

我的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

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

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

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

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

From users_controller_spec.rc

来自 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.

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

Help?

帮助?

回答by thetrystero

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...

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

回答by JKMajcen

"Kicked" Spork and fixed the problem for me.

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

回答by Zach Alberico

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