2017-10-29 3 views
0

로 리디렉션 찾지 않습니다. 다음과 같이 테스트는 : 나는 이상한 오류가 발생이 테스트를 통과하면컨트롤러 ID가 나는이 컨트롤러가

require 'rails_helper' 

RSpec.describe SalesmenController, type: :controller do 
    include Devise::Test::ControllerHelpers 

    before(:each) do 
    @request.env["devise.mapping"] = Devise.mappings[:owner] 
    @current_owner = FactoryGirl.create(:owner) 
    sign_in @current_owner 
    @current_company = FactoryGirl.create(:company, owner: @current_owner) 
    end 

describe "POST #create" do 
    before(:each) do 
     salesman = FactoryGirl.create(:salesman, company: @current_company) 
     post :create, params: {:company_id => @current_company.id, salesman: { name: salesman.name, company_id: @current_company.id } } 
    end 

    it "redirect to new team" do 
     expect(response).to have_http_status(:success) 
    end 

    it "Create team with right attributes" do 
     expect(Salesman.last.company).to eql(@current_company) 
     expect(Salesman.last.name).to eql(@salesman[:name]) 
    end 
    end 
end 

, 컨트롤러에서 나는 쇼 경로에 리디렉션에 표시 할 때 ID를 얻을 수없는 것 같다. 오류는 다음과 같습니다.

1) SalesmenController POST #create redirect to new team 
    Failure/Error: redirect_to company_salesman_path(@salesman.id) 

    ActionController::UrlGenerationError: 
     No route matches {:action=>"show", :company_id=>390, :controller=>"salesmen"} missing required keys: [:id] 

세일즈맨의 신원이 누락되었습니다. 왜 그런지 이해할 수 없으며 이러한 상황에서 벗어날 방법을 모르겠습니다.

내 경로는 다음과 같습니다

Rails.application.routes.draw do 
    resources :companies do 
    resources :salesmen 
    resources :goals do 
     resources :days 
    end 
    end 
    devise_for :owners, :controllers => { registrations: 'registrations' } 
end 

답변

0

이 도움이 될

redirect_to company_salesman_path(:id => @salesman.id) 

또는

redirect_to company_salesman_path(@salesman) 

희망을 봅니다.

+0

첫 번째 도움이되었지만 이제는 테스트를 통과하면 실패/오류 : expect (응답)가 ~ have_http_status (: success) 응답이 성공 상태 코드 (2xx)를 갖기를 기대하지만 302 –

+0

이 응답 상태를 찾았습니다 : 대신 찾음 : 성공. –

+0

이 [link] (http://billpatrianakos.me/blog/2013/10/13/list-of-rails-status-code-symbols/)가 도움이 될 것이라고 생각합니다. [link] (https :// /stackoverflow.com/questions/32883254/http-status-code-302) 너무 –