gpt4 book ai didi

ruby-on-rails - 如何测试不同命名空间下的Controller,为什么测试失败?

转载 作者:行者123 更新时间:2023-11-28 20:04:52 25 4
gpt4 key购买 nike

亲爱的 Overflowers,

我使用的是 Rails 2.3,我已经创建了一个多态 Controller ,它可以被属于不同命名空间的 View 访问。这是故事,感谢您提前阅读:

我有这些路线:

rake 路线 | grep 约会

 new_patient_appointments GET    /patients/:patient_id/appointments/new(.:format)    {:controller=>"appointments", :action=>"new"}
edit_patient_appointments GET /patients/:patient_id/appointments/edit(.:format) {:controller=>"appointments", :action=>"edit"}
patient_appointments GET /patients/:patient_id/appointments(.:format) {:controller=>"appointments", :action=>"show"}
PUT /patients/:patient_id/appointments(.:format) {:controller=>"appointments", :action=>"update"}
DELETE /patients/:patient_id/appointments(.:format) {:controller=>"appointments", :action=>"destroy"}
POST /patients/:patient_id/appointments(.:format) {:controller=>"appointments", :action=>"create"}

new_admin_doctor_appointments GET /admin/doctors/:doctor_id/appointments/new(.:format) {:controller=>"admin/appointments", :action=>"new"}
edit_admin_doctor_appointments GET /admin/doctors/:doctor_id/appointments/edit(.:format){:controller=>"admin/appointments", :action=>"edit"}
admin_doctor_appointments GET /admin/doctors/:doctor_id/appointments(.:format) {:controller=>"admin/appointments", :action=>"show"}
PUT /admin/doctors/:doctor_id/appointments(.:format) {:controller=>"admin/appointments", :action=>"update"}
DELETE /admin/doctors/:doctor_id/appointments(.:format) {:controller=>"admin/appointments", :action=>"destroy"}
POST /admin/doctors/:doctor_id/appointments(.:format) {:controller=>"admin/appointments", :action=>"create"}

...这些 Controller :

Controllers/Admin/doctors_controller.rb

class Admin::DoctorsController < AuthorisedController
end

Controllers/appointments_controller.rb

class AppointmentsController < ApplicationController
end

Controllers/patients_controller.rb

class PatientsController < ApplicationController
end

...以及这些测试:

测试中的相关部分:

test/functional/appointments_conrtroller_test.rb

require 'test_helper'

class AppointmentsControllerTest < ActionController::TestCase

fixtures :patients, :appointments, :doctors, :users
# The following passes:

def setup
login_as :admin
end

test "should show patient appointment" do
get :show, :id => patients(:one).to_param, :appointment_id => appointments(:app_one).id
assert_response :success
end

# The following fails, giving the error after the code block:

test "should show doctor appointment" do
get :show, :id => doctors(:one).to_param, :appointment_id => appointments(:app_one).id
assert_response :success
end

end

错误:

4) Error:
test_should_show_doctor_appointment(AppointmentsControllerTest):
ActionController::RoutingError: No route matches {:controller=>"appointments", :id=>"281110143", :action=>"show", :doctor_id=>2}
test/functional/appointments_controller_test.rb:55:in `test_should_show_doctor_appointment'

测试在 base 命名空间下,因此下一步,我在 Admin 下创建了一个测试。

test/functional/admin/appointments_controller_test.rb

class Admin::AppointmentsControllerTest < ActionController::TestCase

fixtures :patients, :appointments, :doctors, :users
# The following passes:

def setup
login_as :admin
end

test "should show doctor appointment" do
get :show, :id => doctors(:one).to_param, :appointment_id => appointments(:app_one).id
assert_response :success
end

end

...现在我得到这个错误:

 1) Error:
test_should_show_doctor_appointment(Admin::AppointmentsControllerTest):
RuntimeError: @controller is nil: make sure you set it in your test's setup method.
test/functional/admin/appointments_controller_test.rb:13:in `test_should_show_doctor_appointment'

此时,我在setup方法下添加了@controller = AppointmentsController.new,只得到非常熟悉的:

1) Error:
test_should_show_doctor_appointments(Admin::AppointmentsControllerTest):
ActionController::RoutingError: No route matches {:action=>"show", :controller=>"appointments", :doctor_id=>2, :id=>"281110143"}
test/functional/admin/appointments_controller_test.rb:14:in `test_should_show_doctor_appointments'

我觉得这是一个恶性循环。

还是谢谢你...

pR

最佳答案

您可能应该这样做:

@controller = Admin::AppointmentsController.new 

否则,您引用的是主命名空间内的 Controller ,而不是 Admin 命名空间。

关于ruby-on-rails - 如何测试不同命名空间下的Controller,为什么测试失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com