2011-10-22 125 views
3

我正在學習「通過示例學習Rails」一書,我試圖運行測試。出於某種原因,我無法使rspec正常工作。ruby​​ on rails rspec error

如果我運行rspec spec/命令他指示,我得到以下錯誤:

$ rspec spec/ 
/home/desktop/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.21/lib/bundler/runtime.rb:31:in `block in setup': 
You have already activated rspec-core 2.7.1, but your Gemfile requires rspec-core 2.6.4. 
Using bundle exec may solve this. (Gem::LoadError) 

奇怪的是我的Gemfile不指定version--

group :development do 
    gem 'rspec-rails' 
end 

group :test do 
    gem 'rspec' 
    gem 'webrat' 
end 

如果我按照來自錯誤消息的建議並使用bundle exec rspec spec/,然後前兩個測試通過 - 但我們在教程中構建的新「about」頁面失敗,出現以下錯誤,儘管據我所知可以告訴我建立的頁面和控制器操作等)完全相同哎應該是:

Failures: 

    1) PagesController GET 'about' should be successful 
    Failure/Error: response.should_be_success 
    NoMethodError: 
     undefined method `should_be_success' for #<ActionController::TestResponse:0x00000003539438> 
    # ./spec/controllers/pages_controller_spec.rb:23:in `block (3 levels) in <top (required)>' 

Finished in 0.10861 seconds 
3 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/pages_controller_spec.rb:21 # PagesController GET 'about' should be successful 

我是一個非常有經驗的程序員,但我碰到有衝突的寶石版本和一百個不同的方式無窮無盡的問題,以完成使用Rails各種不同的任務(例如。 「使用RVM」,「不要使用RVM」,「使用sudo安裝gems」,「不要使用sudo安裝gems」等)

我的開發機器正在運行ubuntu linux。

感謝您的任何幫助 - 請解釋您是否會在Ruby noob語言中做錯了什麼!

回答

6

正在運行bundle exec是正確的,因爲您已經安裝了一個新版本的gem,而不是Gemfile.lock中指定的gem,所以需要安裝它。使用bundle exec將覆蓋加載路徑,導致僅加載Gemfile.lock中指定的寶石。 (您可能會發現它方便的別名bundle exec的東西短。)

的回答第二個問題是正確的錯誤消息:

undefined method `should_be_success' 

應該should be_success

+0

謝謝安德魯!我錯過了那個錯誤。現在所有人似乎都在工作。有沒有辦法更新Gemfile.lock,以便「正確」的rspec gem被安裝? – julio

+0

運行'bundle update'會根據給定的依賴關係樹將所有gem更新到最新的可能版本,'bundle update rspec'會爲指定的gem做更新。你不應該手動更新鎖文件。 –

+0

完美!非常感謝你的幫助。 – julio