如何在 Rails 7 Minitest 中设置命名空间模型装置?

问题描述 投票:0回答:0

我有一个类似的问题,比如this old one related to using namespaced model fixtures for a has_one-belongs_to association in Rails 7.

关于 ActiveRecord,在我的模型文件中我有:

# app/models/user.rb
class User < ApplicationRecord
  has_one :setting, :class_name  => 'Users::Setting', :foreign_key => 'user_id'
end

# app/models/users/setting.rb
class Users::Setting < ApplicationRecord
  belongs_to :user, :class_name  => 'User', :foreign_key => 'user_id'
end

# app/models/users.rb
module Users
  def self.table_name_prefix
    'users_'
  end
end

关于固定装置,在我创建并成功使用以下用户模型的 test/fixtures/users.yml 文件中:

# test/fixtures/users.yml

foo:
  id: 1
  name: Foo
  email: [email protected]
  ...

bar:
  id: 2
  name: Bar
  email: [email protected]
  ...

但是我在为 Users::Setting 模型设置固定装置时遇到了麻烦。我尝试创建 test/fixtures/users/settings.yml 文件并使用以下内容但没有成功:

# test/fixtures/users/settings.yml

_fixture:
  model_class: Users::Setting

foo_setting:
  id: 1
  user_id: 1
  ...

# foo_setting:
#   id: 1
#   user: foo
#   ...

当我运行测试时,出现如下错误:

Minitest::UnexpectedError: ActiveRecord::Fixture::FixtureError: 表 “用户”没有名为“user_id”/“用户”的列。

在用户固定装置中,我也尝试使用以下但我得到相同的 Minitest 错误:

# test/fixtures/users.yml

foo:
  id: 1
  name: Foo
  email: [email protected]
  setting: foo_setting (Users:Setting) # <<<
  ...

我也试过像这样编辑 test/test_helper.rb 文件,但我得到了同样的 Minitest 错误:

class ActiveSupport::TestCase
  fixtures :all
  set_fixture_class 'users/settings' => Users::Setting
end

在 test/integration/user_flows_test.rb 我有:

# test/integration/user_flows_test.rb

require "test_helper"

class UserFlowsTest < ActionDispatch::IntegrationTest
  fixtures :users

  test "can something" do
    user = users(:foo)
    ...
  end
end

如何为命名空间的 Users::Setting 声明工作装置?

ruby-on-rails testing namespaces fixtures minitest
© www.soinside.com 2019 - 2024. All rights reserved.