Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 factory_girl与rspec2玩得不好-ActiveRecord::AssociationTypeMismatch_Ruby On Rails 3_Factory Bot_Rspec Rails - Fatal编程技术网

Ruby on rails 3 factory_girl与rspec2玩得不好-ActiveRecord::AssociationTypeMismatch

Ruby on rails 3 factory_girl与rspec2玩得不好-ActiveRecord::AssociationTypeMismatch,ruby-on-rails-3,factory-bot,rspec-rails,Ruby On Rails 3,Factory Bot,Rspec Rails,Am使用Rails 3.1.0rc8、Factory Girl 2.1.2、Factory Girl Rails 1.2.0和RSpec 2.7.0 我相信我所犯的错误与上面讨论的问题有关 我有一个如下的规范: spec/integration/my_integration_spec.rb: 运行此规范会导致子功能中出现异常: Failure/Error: @product.sold_at << Factory(:outlet, :reseller => @reseller)

Am使用Rails 3.1.0rc8、Factory Girl 2.1.2、Factory Girl Rails 1.2.0和RSpec 2.7.0

我相信我所犯的错误与上面讨论的问题有关

我有一个如下的规范:

spec/integration/my_integration_spec.rb:

运行此规范会导致子功能中出现异常:

Failure/Error: @product.sold_at << Factory(:outlet, :reseller => @reseller)
ActiveRecord::AssociationTypeMismatch:
  Reseller(#90828680) expected, got Reseller(#59351220)
有趣的是,当我将嵌套before钩子的内容移动到主before钩子中时,不会发生此错误

require 'spec_helper'

describe 'A Workflow' do
  before(:all) do
    @reseller = Factory(:reseller)
    @product = Factory(:product, :reseller => @reseller)

    # No error!
    @product.sold_at << Factory(:outlet, :reseller => @reseller)
  end

  describe 'A feature' do
    it 'Does something' do
    end

    describe 'A sub-feature' do
      it 'Does something' do
      end
    end
  end
如果您能帮助您理解这个问题,我将不胜感激。

您以前只能有一个:每个规范文件中都有一个。在等级库顶部使用before:all,然后在描述块中使用before:each。这就是第二个示例起作用的原因,您已经删除了第二个示例:all`


此外,请注意:所有。在规范结束时,此处创建的任何数据都不会从数据库中删除,您需要在after:all中删除它,或者使用数据库清理器gem。有关推理,请参阅。

我认为您之前对一个的限制是错误的:所有都是根据规范文件。RSpec2的文档中有一个嵌套before的示例:每个示例都与我在原始帖子中的示例相同。请重新检查您的原始帖子。您有两个before:all语句和no-before:each语句。如果你的实际代码就是这样的话,那么我认为它不会起作用。你能解释一下我认为它不会起作用的意思吗?我创建了一个要点,演示了嵌套before的用法:所有块。就我所知,它工作得很好。抱歉-我已经回去回顾了我的理解和以前的嵌套:一切都应该像你已经设置好的那样工作。值得注意的是,不建议这样做-请参见[问题及David Chelimsky的回复][。我已经再次查看了您的代码-您可以尝试一下`@product.salled_at@product,:reseller=>@reseller吗
require 'spec_helper'

describe 'A Workflow' do
  before(:all) do
    @reseller = Factory(:reseller)
    @product = Factory(:product, :reseller => @reseller)

    # No error!
    @product.sold_at << Factory(:outlet, :reseller => @reseller)
  end

  describe 'A feature' do
    it 'Does something' do
    end

    describe 'A sub-feature' do
      it 'Does something' do
      end
    end
  end