2017-10-12 5 views
0

'Admin'네임 스페이스에 'ActivityLogsController'컨트롤러가 있습니다. rails server을 실행하면 예상대로 작동하며 /admin/activity_logs과 같은 경로에 액세스 할 수 있습니다. RSpec 컨트롤러 스펙을 실행하면 모든 액션 테스트가 실패를 반환합니다. 예를 들면 다음과 같습니다.Rails 앱은 정상적으로 실행되지만 RSpec은 경로와 일치하지 않습니다.

Failure/Error: get :index 

ActionController::UrlGenerationError: 
    No route matches {:action=>"index", :controller=>"activity_logs"} 

OK,이 표시는 약간 이상하게 보입니다. 컨트롤러 값이 네임 스페이스로 표시됩니다. 그것은 분명히 문제의 일부입니다. rake routes 나에게 서버가 제대로 실행 사실을 반영 예상 네임 스페이스 경로를 제공 실행, 물론

namespace :admin do 
    resources :activity_logs, except: [:show, :destroy] 
end 

:

routes.rb 제대로 네임 스페이스 activity_logs의 항목이 있습니다.

컨트롤러는 'app/controllers/admin/activity_logs_controller.rb'에 정의되어 있으며 해당 네임 스페이스를 반영합니다. 다음과 같이 정의됩니다 :

class Admin::ActivityLogsController < ApplicationController 
    ... 
end 

따라서 RSpec 컨트롤러 사양이 경로를 올바르게 해석하지 못하는 이유는 무엇입니까?

나는 다른 질문에서 필요한 것을 찾지 못했을 때를 대비해이 답변을 게시하고 있습니다.

답변

0

퀘스트돈 Rspec Controllers in and out of namespace with same name을 잠시 파헤 봤더니 내 경우에는 실제 답변이 아니었지만 실마리가있었습니다.

내 문제는 내 컨트롤러가 네임 스페이스에있는 것 외에도 컨트롤러 루트에이라는 동일한 이름을 가진 이라는 별개 컨트롤러가 있다는 것이 었습니다. 게다가 문제를 혼동하는, 나 또한 (혼동)라는 다른 컨트롤러를 포함하는 네임 스페이스, 그래서

activity_log했다 I했습니다 :

controllers 
| 
|- admins 
| |- activity_logs_controller.rb 
| 
|- activity_log 
| |- other_controller.rb 
| 
|- activity_logs_controller.rb 

그래서 내가 기대 한 것처럼 레일 자동 로딩이 일 것으로 보인다 서버를 실행할 때. 컨트롤러를 올바른 위치에 배치하고 경로에 적절한 네임 스페이스를 인식합니다.

하지만 RSpec에 컨트롤러에 왔을 때 로딩이 달랐다 테스트하고 어딘가 깊은 RSpec에있는 activity_log 하위 디렉토리 및 (자동으로 생성) 모듈 (ActivityLog) OtherController, 또는 루트 ActivityLogsController를 포함하는 것 같았다 관련 을 사용하여 Admin :: ActivityLogsController 경로 및 작업을 잘못 생성 할 수 있습니다. 이 믹스의 일부가 아마도 admin/activity_logs_path을 생성하여 예상했던 것보다 우선합니다.

문제의 원인에 대한이 신속한 분석이 부정확 한 경우에도 루트 activity_logs_controller.rb 파일을 다른 네임 스페이스로 이동하는 것이 해결책입니다. 다행스럽게도 다른 컨트롤러를 하위 클래스로 분류 한 상위 클래스로만 컨트롤러를 사용 했으므로 이동이 쉬웠습니다. 내가 예상 했어야했듯이, 똑같은 이름의 여러 물건을 가지고 있으면 나를 혼란스럽게 만들었습니다. RSpec.

관련 문제