У меня есть классСоздание какой-либо класс во время испытаний (ИППП)
Gate < ActiveRecord::Base
self.inheritance_column = :kindof
# some methods
end
# and derived
MoneyHaters < Gate
# some overloaded methods
end
с колонки типа: kindof для STI.
Durning tests Я хочу создать 2-3 ребенка. В основном потому, что каждый производный класс должен быть уникальным в приложении. Как что:
factory :gate do
before(:create) do
gate_name = FFaker::Company.name.gsub(/\s+/,'')
gate_class_name = gate_name.singularize.classify
end
name { gate_name }
# I want that next class will be declared in App namespace, like all others.
gate_class = Class.new(Gate) do
def comission_in(amount)
amount * 0.01 + 5
end
def comission_out(amount)
amount * 0.02 + 5
end
end
Object.const_set(gate_class_name, gate_class)
type { gate_class_name }
country { FFaker::Address.country_code }
end
Код дал мне ошибку, когда побежал с RSpec в строке «Object.const_set»
TypeError: #<FactoryGirl::Declaration::Implicit:0x00000006a1af30 @name=:gate_class_name, @ignored=false, @factory=#<FactoryGirl::Definition:0x00000006ed6df8 @declarations=#<FactoryGirl::DeclarationList:0x00000006ed6dd0 @declarations=[#<FactoryGirl::Declaration::Dynamic:0x00000006ed6998 @name=:name, @ignored=false, @block=#<Proc:[email protected][skipped]>>, #<FactoryGirl::Declaration::Implicit:0x00000006a1af30 ...>], @name=:gate, @overridable=false>, @callbacks=[#<FactoryGirl::Callback:0x00000006ed6a38 @name=:before_create, @block=#<Proc:[email protected][skipped]>>], @defined_traits=#<Set: {}>, @to_create=nil, @base_traits=[], @additional_traits=[], @constructor=nil, @attributes=nil, @compiled=false>> is not a symbol nor a string
но работает нормально в рельсах консоли
Обычно я называю FactoryGirl фабрики для создания объектов , но, если это невозможно, я задаюсь вопросом о любом другом методе.
Любая помощь очень ценится.
не уверен, зачем вам нужны специальные классы для испытаний. Вы не можете использовать уже существующие? –
Возможно, вы используете STI неправильно? –
Код в комментариях нечитабельный. Положите это на вопрос. –