Fix memory leak: do not add trait duplications to @defined_traits
Closes #588
This commit is contained in:
parent
ed2309abfe
commit
664c426bd0
|
@ -6,7 +6,7 @@ module FactoryGirl
|
|||
def initialize(name = nil, base_traits = [])
|
||||
@declarations = DeclarationList.new(name)
|
||||
@callbacks = []
|
||||
@defined_traits = []
|
||||
@defined_traits = Set.new
|
||||
@to_create = nil
|
||||
@base_traits = base_traits
|
||||
@additional_traits = []
|
||||
|
@ -77,7 +77,7 @@ module FactoryGirl
|
|||
end
|
||||
|
||||
def define_trait(trait)
|
||||
@defined_traits << trait
|
||||
@defined_traits.add(trait)
|
||||
end
|
||||
|
||||
def define_constructor(&block)
|
||||
|
|
|
@ -32,7 +32,13 @@ describe FactoryGirl::Definition, "defining traits" do
|
|||
it "maintains a list of traits" do
|
||||
subject.define_trait(trait_1)
|
||||
subject.define_trait(trait_2)
|
||||
expect(subject.defined_traits).to eq [trait_1, trait_2]
|
||||
expect(subject.defined_traits).to include(trait_1, trait_2)
|
||||
end
|
||||
|
||||
it "adds only unique traits" do
|
||||
subject.define_trait(trait_1)
|
||||
subject.define_trait(trait_1)
|
||||
expect(subject.defined_traits.size).to eq 1
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
RSpec::Matchers.define :have_trait do |trait_name|
|
||||
match do |instance|
|
||||
instance.defined_traits.include?(FactoryGirl::Trait.new(trait_name, &@block))
|
||||
instance.defined_traits.any? do |trait|
|
||||
trait.name == trait_name && trait.send(:block) == @block
|
||||
end
|
||||
end
|
||||
|
||||
chain :with_block do |block|
|
||||
|
|
Loading…
Reference in New Issue