簡體   English   中英

使用類似Devise的路由時,如何在Rspec控制器測試中指定控制器和方法名稱?

[英]how to specify controller and method names in Rspec controller test when using Devise-like route?

tl; dr:無法rspec測試裝置控制器,幫助。

我正在使用Devise並具有以下路由(默認的devise_for路由):

GET    /users/cancel(.:format)      devise/registrations#cancel
POST   /users(.:format)             devise/registrations#create
GET    /users/sign_up(.:format)     devise/registrations#new
GET    /users/edit(.:format)        devise/registrations#edit
PATCH  /users(.:format)             devise/registrations#update
PUT    /users(.:format)             devise/registrations#update
DELETE /users(.:format)             devise/registrations#destroy

我想使用Rspec測試我的控制器方法是從給定的一組參數中吐出正確的輸出。

我的規格文件如下所示:

describe Users::RegistrationsController, type: 'controller' do
  it 'creates a user with given parameters' do

    post 'create', username: 'jonsnow', password: '012345678912345', authenticity_token: '12345'
    expect(response.status).to eq(200)
  end

end

我得到的錯誤是:

Failure/Error: post 'create', username: 'jonsnow', password: '012345678912345', authenticity_token: '12345'
ActionController::UrlGenerationError: 
No route matches {:action=>"create", :controller=>"users/registrations"}

這是有道理的,因為我使用的devise_for缺省路由,你可以從看到rake routes的結果,正確的路線是devise/registrations#create ,但我似乎無法找到一個方法來指定控制器名devise/registrations 我認為它是從控制器類名稱“變形”到users/registrations 而且,為了使測試成功,我最好避免弄亂我的路線。 我該怎么做? (請解釋)在此先感謝。

我的寶石版本:

rspec '3.2.1'
ruby '2.1.5'
rails '4.2.0'

為了測試從Devise繼承的控制器,還需要一些其他配置。

describe YourControllerWhichInheritsDevise, type: 'controller' do
  before do
    @request.env["devise.mapping"] = Devise.mappings[:user]
  end

  it 'creates a user with given parameters' do
    post 'create', username: 'jonsnow', password: '012345678912345', authenticity_token: '12345'
    expect(response.status).to eq(200)
  end
end

從Devise自述文件中 :“如果要測試Devise內部控制器或從Devise繼承的控制器,則需要在請求之前告訴Devise應該使用哪個映射。這是必要的,因為Devise從路由器獲取了此信息,但是由於功能正常測試沒有通過路由器,需要明確說明。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM