加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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资源的其他设置……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读