gpt4 book ai didi

ruby-on-rails - 为什么我的 Rails Minitest 多态失败?

转载 作者:数据小太阳 更新时间:2023-10-29 07:37:41 26 4
gpt4 key购买 nike

我有这些模型:

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

我有来自 Controller 的代码片段来访问它们,它在手动测试时有效(这是一个 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'

和这个 Controller 测试代码:

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

这表明我无法访问“资源”以从设置对象中获取用户。

我使用 byebug 检查了变量(在运行测试的过程中)并且设置对象 (@user.setting) 有一个 resource_id 和 resource_name,所以我想知道为什么我不能使用“资源”从设置对象访问用户"运行测试时的属性。

有什么想法吗?

谢谢!

编辑:添加了更多 Controller 代码

编辑:在设置夹具中添加 URL 字段

最佳答案

在 test_booking_page_success 之前尝试以下操作

def test_url
assert_not_empty @user.setting.url
end

您可能正在传递一个空的“url”参数...如果显示的固定装置是完整的并且您没有从其他东西生成 url。

Upd 我能想象的唯一场景是:scott_settings 中的 booking_url 设置为您的固定装置中的“urlsegment”以外的内容。所以它返回其他设置为零资源...

关于ruby-on-rails - 为什么我的 Rails Minitest 多态失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491095/

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