2017-01-31 12 views
1

У меня есть следующий тест:RSpec: Поместить запрос определить источник URL

it "should generate invoice on reconnect finish after cycle_date" do 
params = { 
    :id => @reconnect.id, 
    :state => "Finish", 
    :install => { 
    :notes => "blah" 
    } 
} 
put :update, params 
@reconnect.reload 
expect(@reconnect.customer.invoices.count).to eq 1 
expect(@reconnect.state). to eq "completed" 
end 

, но мне нужно для линии put :update, params, чтобы позволить мне указать, какой URL-адрес, что исходит от, потому что в моем маршруте:

resources :installs, :except => [:index, :show], :controller => "appointments" do 
collection do 
    get ':id/admin_edit', to: 'appointments#admin_edit', as: :edit_admin 
end 
    end 

resources :reconnects, :except => :index, :controller => "appointments" do 
    collection do 
     get ':id/schedule_reconnect/:address_id', to: 'reconnects#schedule_reconnect', as: :schedule 
     get 'reconnect_appointment', to: 'reconnects#reconnect_appointment' 
     post 'submit_reconnect', to: 'reconnects#submit_reconnect', as: :submit_reconnect 
     post 'complete_reconnect', to: 'reconnects#complete_reconnect', as: :complete_reconnect 
     get ':id/admin_edit', to: 'appointments#admin_edit', as: :edit_admin 
    end 
    end 

и в контроллере:

def classify_path 
    @appointment_type = self.request.path.split("/")[1] 
    @appointment_type_singular = @appointment_type.chomp("s") 
    @appointment_type_class = @appointment_type.classify.constantize 
    end 

Так что для моего теста мне нужно указать, если сво «установить» или «повторно подключить» в тесте.

+0

Я думаю, что так, как вы «Извлеките ваши маршруты неправильно» - как контроллер должен знать разницу между «переподключениями» и «установками»? Оба указывают на одни и те же методы на одном контроллере. – oolong

+0

см. Редактирование моего сообщения, чтобы включить отсутствующий метод –

+2

Примечание: не ответ ... просто подумал, что вы, возможно, захотите узнать. Вместо '@appointment_type_singular = @ meeting_type.chomp (" s ")' Я бы использовал '@appointment_type_singular = @ meeting_type.singularize' –

ответ

1

Вы должны быть в состоянии использовать use_route помощника в ваших RSpec тестов для достижения этой цели:

params = { 
    use_route: 'reconnects', 
    id:  @reconnect.id, 
    state:  'Finish', 
    reconnect: { notes: 'blah' } 
} 

put :update, params 
0

ответ улун был ближе, но решение:

params = { 
    :use_route => 'reconnects', 
    :id => @reconnect.id, 
    :state => "Finish", 
    :reconnect => { 
    :notes => "blah" 
    } 
} 
put :update, params 
+0

Отредактировал свой ответ, чтобы исправить проблему синтаксиса, с которой вы, вероятно, столкнулись – oolong