繁体   English   中英

RSpec / FactoryGirl堆栈级别太深

[英]RSpec/FactoryGirl Stack level too deep

我遇到了一个看似非常简单问题的问题。

所以我有3个型号:Foo,Bar和Lol

  • Foo has_many酒吧
  • Lol has_many酒吧
  • Bar belongs_to Foo&Lol

这是给我错误的代码。

规格/工厂/ foos.rb

FactoryGirl.define do
  factory :foo do
    after(:create) do |foo|
      create_list(:bar, 1, foo: foo)
    end
  end
end

规格/工厂/ bars.rb

FactoryGirl.define do
  factory :bar do
    foo
    lol
  end
end

规格/工厂/ lols.rb

FactoryGirl.define do
  factory :lol do
    after(:create) do |lol|
      create_list(:bar, 1, lol: lol)
    end
  end
end

我正试图让这个测试通过

规格/型号/ foo_spec.rb

require 'spec_helper'
describe Foo do
  it "works" do
    foo = FactoryGirl.create(:foo)
    puts foo.bars
    foo.bars.each {|bar| puts bar.lol}
    foo.should_not be_nil
  end
end

你当前的工厂设置有很多递归,这导致Stack level too deep错误。

简而言之,当你调用foo = FactoryGirl.create(:foo)

factory:foo => create_list(:bar,1,foo:foo)=> factory:bar => factory:foo => create_list(:bar,1,foo:foo)......保持循环

lol

您需要重构代码。 一种可能的解决方案如下:

将您的工厂更改为:

## spec/factories/foos.rb

FactoryGirl.define do
  factory :foo do
  end
end

## spec/factories/bars.rb

FactoryGirl.define do
  factory :bar do
    foo
    lol
  end
end

## spec/factories/lols.rb

FactoryGirl.define do
  factory :lol do
  end
end

更新您的示例如下:

## spec/models/foo_spec.rb

require 'spec_helper'
describe Foo do
  it "works" do
    foo = FactoryGirl.create(:bar).foo        
    puts foo.bars
    foo.bars.each {|bar| puts bar.lol}
    foo.should_not be_nil
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM