factory_girl 忽略它正在创建实例的 class 的名称空间
factory_girl ignores the namespace of the class that it's creating an instance of
我搜索了很多,但没有找到与我类似的问题。假设我们有命名空间模型,UserManagement::User
和 UserManagement::Session
。
以下是这些模型的工厂:
FactoryGirl.define do
factory :user, class: UserManagement::User do
UserManagement::User.set_database_name 'db_name'
id '000000000a00a000a0000001'
login 'Mark'
password 'password'
password_confirmation 'password'
data { {} }
session { build(:session) }
initialize_with { new(attributes) }
end
end
和
FactoryGirl.define do
factory :session, class: UserManagement::Session do
token '0000-0000-0000'
expiration { Time.zone.now + 30.minutes }
end
end
当我执行 FactoryGirl.lint
时,我收到 user - uninitialized constant Session (NameError)
,我猜这是命名空间问题,因为 :user
工厂试图寻找 Session
模型而不是 UserManagement::Sesssion
.
好的,所以我找到了解决该问题的方法。正如我猜测的那样,MongoMapper 不像 ActiveRecord 那样对模块非常友好。我必须明确定义我的 Session 关联的 class 名称,即使它在同一模块范围内也是如此。所以解决方案是一个 :session, class_name: 'UserManagement::Session' 感谢大家的帮助!
我搜索了很多,但没有找到与我类似的问题。假设我们有命名空间模型,UserManagement::User
和 UserManagement::Session
。
以下是这些模型的工厂:
FactoryGirl.define do
factory :user, class: UserManagement::User do
UserManagement::User.set_database_name 'db_name'
id '000000000a00a000a0000001'
login 'Mark'
password 'password'
password_confirmation 'password'
data { {} }
session { build(:session) }
initialize_with { new(attributes) }
end
end
和
FactoryGirl.define do
factory :session, class: UserManagement::Session do
token '0000-0000-0000'
expiration { Time.zone.now + 30.minutes }
end
end
当我执行 FactoryGirl.lint
时,我收到 user - uninitialized constant Session (NameError)
,我猜这是命名空间问题,因为 :user
工厂试图寻找 Session
模型而不是 UserManagement::Sesssion
.
好的,所以我找到了解决该问题的方法。正如我猜测的那样,MongoMapper 不像 ActiveRecord 那样对模块非常友好。我必须明确定义我的 Session 关联的 class 名称,即使它在同一模块范围内也是如此。所以解决方案是一个 :session, class_name: 'UserManagement::Session' 感谢大家的帮助!