2010-08-12 54 views
0

我在Rspec的Rspec工作.. 我想測試我的控制器使用RSpec.i我有一個用戶控制器與功能如新,標籤等。Rspec測試存在的行動是行不通的

我創建的文件下投機/ users_controller_spec.rb

和添加的測試用例。

require 'spec_helper' 

describe UsersController do 
    integrate_views 

    it "should use UsersController" do 
    controller.should be_an_instance_of(UsersController) 
    end 


    describe "GET 'new'" do 
    it "should be successful" do 
     get 'new' 
     response.should be_success 
    end 

    it "should have the title" do 
     get 'new' 
     response.should have_tag("title", "First app") 
    end 
    end 
end 

哪獲得通過。

但是當我添加一個測試用例標籤.. 像

describe "GET 'tags'" do 
    it "should be successful" do 
     get 'tags' 
     response.should be_success 
    end 
    end 

這將導致一個錯誤

F的

1) 'UsersController GET' 標籤'應該成功'失敗 預計成功?返回true,得到虛假

爲什麼它會這樣?我對ROR很新,也找不到原因爲什麼我得到這個錯誤。 如何使這個通行證。 另外我想這是運行我的網址

http://localhost:3000/users/tags。但使用$規格規格測試/我得到的錯誤..

+0

你可以爲這個控制器顯示你的路線嗎? – bjg 2010-08-12 09:18:57

+0

我在routes.rb中搜索存在的地址 map.tags'/ tags',:controller =>'users',:action =>'tags'但它並不存在......即使我添加了這個運行規範即時獲取相同的錯誤。 – useranon 2010-08-12 10:03:19

回答

0

您的測試可能失敗的任何原因。該路由是否需要參數散列中的ID?控制器操作是否重定向?控制器是否產生錯誤?

您需要查看控制器代碼/和/或routes.rb以發現故障原因。請注意控制器中的before過濾器,這可能無法使動作完全可達。

0

您需要添加不在默認7條路由中的自定義路由。假設你的路線中有resources :users,你需要修改它。我還假設您的代碼路由對於單個用戶是唯一的。

resources :users do 
    member do 
    # creates /users/:user_id/tags 
    get :tags 
    end 
end 

而在你RSpec的測試,你會這樣稱呼它

describe '#tags' do 
    user = create :user 
    get :tags, user_id: user.id 
end 

如果路由是不是要每個用戶唯一的另一種選擇是一個收集路線,是這樣的:

resources :users do 
    collection do 
    # creates /users/tags 
    get :tags 
    end 
end