Ruby on rails 3 factory_girl与rspec2玩得不好-ActiveRecord::AssociationTypeMismatch
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: 运行此规范会导致子功能中出现异常: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)
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