ruby-on-rails – 为什么我的Rails Minitest Polymorphic失败?
发布时间:2020-12-17 02:07:45 所属栏目:百科 来源:网络整理
导读:我有这些模型: class User ActiveRecord::Base has_one :setting,as: :resource,dependent: :destroy has_many :servicesendclass Setting ActiveRecord::Base belongs_to :resource,polymorphic: trueendclass Service ActiveRecord::Base belongs_to :use
我有这些模型:
class User < ActiveRecord::Base has_one :setting,as: :resource,dependent: :destroy has_many :services end class Setting < ActiveRecord::Base belongs_to :resource,polymorphic: true end class Service < ActiveRecord::Base belongs_to :user end 我有一个来自控制器的代码片段来访问它们,这在手动测试时有效(这是一个before_action方法): before_action :setup def get_vars @setting = Setting.find_by_booking_url @url @user = @setting.resource @services = @user.services end def setup @url = params[:url] @setting = Setting.find_by_url @url @user = @setting.resource end 但在使用这些灯具进行自动化测试时: # fixtures/users.yml james: email: 'james@example.com' first_name: 'James' last_name: 'Soften' encrypted_password: <%= default_password_digest %> # fixtures/settings.yml scott_settings: resource: james (User) time_zone: 'Pacific Time (US & Canada)' url: 'urlsegment' 和这个控制器测试代码: setup do @user = users(:james) end def test_booking_page_success get :new,url: @user.setting.url assert_response :success end 它失败并出现错误: undefined method `services` for nil:NilClass 这表示我无法访问“资源”以从Setting对象获取用户. 我使用byebug检查变量(在运行测试的中间),而Setting对象(@ user.setting)有一个resource_id和resource_name,所以我想知道为什么我不能使用“resource”属性从Setting对象访问用户运行测试. 有任何想法吗? 谢谢! 编辑:添加更多控制器代码 编辑:在设置夹具中添加了URL字段 解决方法
在test_booking_page_success之前尝试以下操作
def test_url assert_not_empty @user.setting.url end 您可能正在传递一个空的’url’参数…如果显示的灯具已完成且您没有从其他内容生成URL. Upd我能想象的唯一场景是:scott_settings中的booking_url被设置为你的灯具中的’urlsegment’以外的东西.所以它返回nil资源的其他设置…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |