2015-02-02 6 views
1

을 중첩 된 네임 스페이스가 관리자의 조치를RSpec에 ActionController :: UrlGenerationError에 대한 내 생성 조치를 내 컨트롤러 사양에서이 오류를 받고 있어요

다음

No route matches {:action=>"create", :assessment=>{:course_id=>"1", :curriculum_id=>"1"}, :controller=>"admin/assessments"}

내 컨트롤러 사양입니다 작성 :

it "sets the flash success" do 
    set_current_admin 
    course = Fabricate(:course) 
    post :create, assessment: { course_id: course.id, curriculum_id: course.curriculum.id } 
    expect(flash[:success]).not_to be_blank 
end 

post :create.. 줄에 오류가 발생합니다. 여기에 평가에 대한 내 라우팅입니다

def create 
    @assessment = Assessment.new(assessment_params.merge!(course_id: Course.find(params[:course_id]).id)) 
    if @assessment.save 
    flash[:success] = "You have created your assessment." 
    redirect_to curriculum_course_assessment_path(@assessment.course.curriculum, @assessment.course, @assessment) 
    else 
    ... 
    end 
end 

: 그리고 여기

는 평가를 내 만드는 작업입니다 ... 여기

resources :curriculums, only: [:index, :show] do 
    resources :courses, only: [:show] do 
    resources :assessments, only: [:show] 
    namespace :admin do 
     resources :assessments, only: [:index, :new, :create, :edit, :update] 
    end 
    end 
end 

rake routes에서 라인입니다

POST /curriculums/:curriculum_id/courses/:course_id/admin/assessments(.:format) admin/assessments#create

실제로 생성 브라우저에서 동작하는 경우 제대로 작동하므로 내 사양의 구문에 문제가 있다고 생각합니다. 이것에 대한 조언을 많이 주시면 감사하겠습니다. (여기서는 일반적으로 모범 사례가 아닌 리소스로 이중 중첩되어 있음을 알고 있지만 커리큘럼 & 코스 매개 변수에 액세스 할 수있는 다른 방법을 찾을 수 없습니다.)

답변

1

course_id을 중첩하고 있습니다. curriculum_id 매개 변수는 assessment 해시 안에 있습니다. 경로에서는 중첩되지 않습니다.

+0

스펙 라인은 실제로'assessment' 데이터를 게시하지 않으므로'post : create, course_id : foo, curriculum_id : blah, assessment : {}'일뿐입니다. 'assessment' 해시의 일부로 전달 된 것만 허용하면됩니다. – sevenseacat

+0

정말 고마워! 나는'post : create ... '위에'attrs = Fabricate.attributes_for (: assessment)'를 추가하고 그 행을'post : create, assessment : attrs, course_id : course.id, curriculum_id : course'로 변경했다. 커리큘럼 .id', 부적절한 중첩 문제를 제거합니다. – Matt