Документация не очень полезна в отношении того, как ведет себя опция :class
или что она ожидает в качестве значения, но источник был более полезным.Возвращаясь к сообщению об ошибке, мы находим FactoryBot::Decorator::ClassKeyHash#symbolize_keys
:
def symbolized_key(key)
if key.respond_to?(:to_sym)
key.to_sym
elsif FactoryBot.allow_class_lookup
ActiveSupport::Deprecation.warn "Looking up factories by class is deprecated and will be removed in 5.0. Use symbols instead and set FactoryBot.allow_class_lookup = false", caller
key.to_s.underscore.to_sym
end
end
. key.to_sym
в первой ветви - это обычное выражение для "Я хочу Symbol
или String
».key.to_s.underscore.to_sym
во второй ветви сообщает нам, какой формат ожидается.
Если вы запустите Vehicle::Car
- to_s.underscore
, вы получите 'vehicle/car'
, поэтому они должны работать:
factory :vehicle_car, class: 'vehicle/car' do; end
factory :vehicle_train, class: 'vehicle/train' do; end
factory :vehicle_jet, class: 'vehicle/jet' do; end
или если вы действительно хотите Symbol
с (или есть пунктуация):
factory :vehicle_car, class: :'vehicle/car' do; end
factory :vehicle_train, class: :'vehicle/train' do; end
factory :vehicle_jet, class: :'vehicle/jet' do; end