2011-02-17 104 views
4

要獲得調查問卷的名單我使用我怎麼能RSpec的測試與路徑通配符

GET "/questionnaires/user/1/public/true/mine/true/shared/true" 

在routes.rb中我有

/questionnaires/*myparams(.:format) {:controller=>"questionnaires", :action=>"list"} 

控制器使用通配符路由創建一個控制器查詢列表方法

class QuestionnairesController < ApplicationController 
    before_filter :authenticate 

    def list 
    myparams = params[:myparams].split("/").to_h 
    end 

    # ... 
end 

我想創建一個spec文件中所有選項的測試用例

describe "GET list" do 
    it "returns the list of questionnaires for the user" do 
    get :list 
    # ... 
    end 
end 

我所得到的,當我運行rspec的是

Failures: 

1) QuestionnairesController List GET list returns the list of questionnaires for the user 
    Failure/Error: get :list 
    No route matches {:controller=>"questionnaires", :action=>"list"} 
    # ./spec/controllers/questionnaires_controller_spec.rb:20 

的問題是怎麼寫的規範文件的匹配替換的參數傳遞給rspec的。我喜歡做這樣的事情:

describe "GET list" do 
    it "returns the list of questionnaires for the user" do 
    get :list, "/user/1/public/true/mine/true/shared/true" 
    end 
end 

和更改參數,以測試不同的情況

回答

1

文件名匹配發生在調度員,所以在調用時控器PARAMS已分配。當達到控制器動作時,globbed參數應該已經被拆分成一個數組params[:myparams]

如果你想在控制器中進行測試,剛剛成立params哈希表的方式,調度員將:

describe "GET 'list'" do 
    it "should be successful" do 
    get :list, :myparams => "user/1/public/true/mine/true/shared/true".split("/") 
    response.should be_success 
    end 
end 
+0

我最終使用GET:列表:myparams =>「rspec的/真正/用戶/#{@user.id}/public/true/mine/false/shared/false「沒有拆分,拆分在控制器內完成 – user567592 2011-02-19 00:50:09