2013-04-22 97 views
1

Rails newb here。Ruby on Rails RSpec路由失敗

嘗試RSpec測試索引路由的200狀態碼。

在我index_controller_spec.rb

require 'spec_helper' 

describe IndexController do 

    it "should return a 200 status code" do 
    get root_path 
    response.status.should be(200) 
    end 

end 

的routes.rb:

Tat::Application.routes.draw do 

    root to: "index#page" 

end 

index_controller:

class IndexController < ApplicationController 

    def page 
    end 

end 

當我訪問我的瀏覽器都不錯,但RSpec的命令行給出錯誤

IndexController should return a 200 status code 
    Failure/Error: get '/' 
    ActionController::RoutingError: 
     No route matches {:controller=>"index", :action=>"/"} 
    # ./spec/controllers/index_controller_spec.rb:6:in `block (2 levels) in <top (required)> 

'

我不明白?

謝謝。

+0

當你做'耙路線-T'時,你會得到什麼? – uday 2013-04-22 23:30:24

+0

我在這裏沒有看到任何錯誤。 'rake routes'爲'root'顯示的是什麼?另外,你是否正在運行任何類型的預加載器,如Spork/Zeus/Spring /等?一些預加載優化器在更改時不會自動重新加載路由。 – 2013-04-22 23:31:31

+0

是啊我正在使用Spork,重啓服務器並沒有改變任何東西。耙路線給出: 根/索引號#頁 – 2013-04-22 23:39:54

回答

3

歡迎來到Rails世界!測試有許多不同的風格。看起來你將控制器測試與路由測試混爲一談。

您看到此錯誤,因爲root_path正在返回/。 RSpec控制器測試中的get :action旨在在該控制器上調用該方法。

如果您發現您的錯誤信息,它說:action => '/'

要測試控制器,改變你的測試:

require 'spec_helper' 

describe IndexController do 
    it "should return a 200 status code" do 
    get :page 
    response.status.should be(200) 
    end 
end 

如果你有興趣在路由測試,看https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs一個例子是:

{ :get => "/" }. 
    should route_to(
    :controller => "index", 
    :action => "page" 
) 
+0

謝謝。我以爲我正在精神上。 Rails與我以前使用過的其他任何東西都不一樣! – 2013-04-23 06:52:01

+2

我們都去過那裏。學習曲線是對數的......它變得容易得多,但它是一個持續的攀升。堅持下去! – crftr 2013-04-23 07:41:10