3

我正在尝试rails3。我正在使用railstutorial 网站来探索有关 rails3 的更多信息;本教程一开始就非常好(我对 rails2 的经验很少)。

我有一个 rspec 问题,它目前阻碍了我的进步。看到教程推荐使用rspec2.0.0.beta.18 gem;我改为使用安装 rspec2.0.0.beta.20 gem

bundle install

但是我发现这个版本的 rspec 存在问题 我的 rspec for integration_test 看起来像:

describe "LayoutLinks" do
  it "should have a About page at '/about'" do  
    get '/about'
    response.should have_selector('h1', :content => "About Us")
  end 
end

失败看起来像:

Failures:
  1) LayoutLinks should have a About page at '/about'
     Failure/Error: Unable to find matching line from backtrace
     stack level too deep
     # /home/arun/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/forwardable.rb:185

(注意:那些看过第 5 章的人在理解上下文时不会有问题。)

如果我在 Gemfile 中将 rspec 版本更改为 2.0.0.beta.18 并运行 rspec 我会收到以下错误

arun@ubuntu-world:~/Project/Rails/rails3/sample_app$ rspec spec/
/home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/runtime.rb:27:in `block in setup': You have already activated rspec-core 2.0.0.beta.20, but your Gemfile requires rspec-core 2.0.0.beta.18. Consider using bundle exec. (Gem::LoadError)
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `block in each'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `each'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `each'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/runtime.rb:17:in `setup'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler.rb:100:in `setup'
        from /home/arun/Project/Rails/rails3/sample_app/config/boot.rb:8:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/arun/Project/Rails/rails3/sample_app/config/application.rb:1:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/arun/Project/Rails/rails3/sample_app/config/environment.rb:2:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/arun/Project/Rails/rails3/sample_app/spec/spec_helper.rb:3:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/arun/Project/Rails/rails3/sample_app/spec/requests/layout_links_spec.rb:1:in `<top (required)>'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `load'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `block in load_spec_files'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `map'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/configuration.rb:302:in `load_spec_files'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/command_line.rb:18:in `run'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/runner.rb:46:in `run_in_process'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/runner.rb:37:in `run'
        from /home/arun/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/runner.rb:10:in `block in autorun'
4

7 回答 7

2

我有同样的问题。在第 5 章结束时,来自/spec/requests/layout_links_spec.rb的测试都因相同的错误而失败(控制器测试工作正常):

Failure/Error: Unable to find matching line from backtrace 
stack level too deep
# C:/Ruby192/lib/ruby/1.9.1/forwardable.rb:185

在对/spec/requests/layout_links_spec.rb文件进行了一些故障排除之后,似乎response在此上下文中使用是触发问题的原因。例如,如果文件如下所示,则没有错误:

require 'spec_helper'

describe "LayoutLinks" do

    it "should run tests properly from this file" do
        get '/'
    end
end

但是从教程中复制的文件内容如下:

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
end

response调用时立即抛出错误

这是在 Windows 7 上(我尝试在系统级别而不是在 Cygwin 中设置 Ruby、Git、Vim 和其他开发工具)。

Rspeicher - 按照 RailsTutorial.org 的步骤,/config/routes.rb文件看起来像这样:

SampleApp::Application.routes.draw do
 get "users/new"

 match '/signup', :to => 'users#new'

 match '/contact', :to => 'pages#contact'
 match '/about', :to => 'pages#about'
 match '/help', :to => 'pages#help'

 root :to => 'pages#home'
end

就像 Arun 说的那样,这一切都在浏览器中按预期工作,所以问题似乎出在 rspec 或 ruby​​ 中。如果 ruby​​ 安装在 Cygwin 下,我想这不是问题。我希望不必恢复到纯 Cygwin 环境,特别是因为我的 webroot 和项目文件已经在 Cygwin 的虚拟 unix 文件夹结构之外进行管理。

于 2010-11-12T14:57:25.113 回答
0

你也可以试试跑步

bundle exec rake db:test:prepare
于 2013-07-03T23:09:43.120 回答
0

bundle install每当您更改 Gemfile 时,应通过重新运行来修复第二个错误。

至于第一个错误,您能否发布您的 routes.rb 文件中定义“/about”路由的行?

于 2010-09-12T20:04:21.367 回答
0

您需要使用 gem uninstall 删除其中一个 gem:

$ gem 卸载 rspec-core -v 2.0.0.beta.20

您还可以使用 gem list 查看已安装的 gems 版本。

于 2010-09-29T01:28:30.287 回答
0

Rspec 在 Hartl 教程的 11 章中运行良好。但不知何故,我弄乱了我的 gemfille,我开始遇到同样的问题,rspec“堆栈级别太深”并且无法通过“捆绑安装”解决。所以我疯狂地做了一个

windows> gem uninstall rspec rspec-rails rspec-expectations rspec-mock rspec-core

(所有版本)。“宝石清单”显示它们确实都不见了。然后我执行了一个

> bundle install
...
Using rspec-core (2.0.0.beta.22)
Using rspec-expectations (2.0.0.beta.22)
Using rspec-mocks (2.0.0.beta.22)
Using rspec (2.0.0.beta.22)
Using rspec-rails (2.0.0.beta.22)
...

这就是我的 Gemfile 中的内容。但是,'gem list -d rspec' 仍然显示 -no- rspec 或 rspec-xxx gems 已安装和 rspec-core 问题...

> rails g rspec:install       *#for good measure*
...
> rspec -v
C:/Ruby192/lib/ruby/1.9.1/rubygems.rb:762:in `report_activate_error': Could not 
find RubyGem rspec-core (>= 0) (Gem::LoadError)

但是“捆绑列表”表示已安装。那么如何让 rspec 再次工作呢?


更新

我解决了这个问题,但首先我最谦虚地向arun kumar道歉,因为他在他的问题上扎营并介于它和答案之间。我认为我的问题是相似的,我的“答案”将放在最后。

首先,我必须做一个

> gem install rspec -v 2.0.0.beta.22
> gem install rspec-rails -v 2.0.0.beta.22

而不是期望捆绑器做到这一点。bundler 在这里似乎并不可靠。这让我再次调用 rspec,但我仍然不得不处理“堆栈级别太深”。通过将 rspec 和 rspec-rails 升级到 2.0.1(来自 David Chelimski:http ://www.ruby-forum.com/topic/282245 )来解决这个问题。再次更改我的 Gemfile 并调用 bundle-install 不起作用。我必须像上面一样卸载所有五个 rspec-xxx gem 并手动执行

> gem install rspec -v 2.0.1
> gem install rspec-rails -v 2.0.1

也许我不需要先卸载,但我做了。很久以前,发帖人可能已经解决了他的问题,但这是我的解决方案,可能适用于其他人——回想一下我有 Windows Vista64。

于 2010-10-23T05:48:18.263 回答
0

它绝对与 Windows 或您在那里的任何环境无关。我的 Mac 也遇到了同样的情况。

我的routes.rb文件(来自同一个教程)如下所示:

SampleApp::Application.routes.draw do

  resources :users

  match '/signup', :to => 'users#new'
  match '/contact', :to => 'pages#contact'
  match '/about', :to => 'pages#about'
  match '/help', :to => 'pages#help'

end
于 2010-11-14T19:58:38.247 回答
0

我再次运行“捆绑安装”,当我查看 Gemfile 和 Gemfile.lock 时,我发现无论我使用 2.0.0.beta.18 还是 2.0.0.beta.20 都捆绑了适当的 gem。

routes.rb 将 /about 映射到属于特定控制器的某些特定操作。当我在浏览器中访问页面时,我也得到了正确的页面;所以我认为这不是问题所在。(不幸的是,我现在没有代码,不能在这里粘贴)

以下是我无法理解的错误

arun@ubuntu-world:~/Project/Rails/rails3/sample_app$ rspec spec/
/home/arun/.rvm/gems/ruby-1.9.2-p0/gems/bundler-1.0.0/lib/bundler/runtime.rb:27:in `block in setup': You have already activated rspec-core 2.0.0.beta.20, but your Gemfile requires rspec-core 2.0.0.beta.18. Consider using bundle exec. (Gem::LoadError)

我确实知道bundle exec是什么,更不用说如何使用它了......

——阿伦

于 2010-09-14T11:38:39.583 回答