0

我正在使用 Mongoid 构建 Rails 3.2.11 应用程序。我用 Cucumber 测试并用 FactoryGirl 创建测试对象。我有嵌入的对象。我希望能够将 FactoryGirl 特征与我的父对象和嵌入对象一起使用,以进行大量排列并保持事物干燥。

问题:我似乎无法将特征应用于嵌入对象。

model.rb(实际上是单独的模型文件)

class User    
   include Mongoid::Document

   #Fields and stuff
   embeds_one :car
end

class Car    
   include Mongoid::Document

   #Fields and stuff
   embedded_in :user 
end

规格/工厂.rb

FactoryGirl.define do
  factory :user do

    status 'active'     # shared attribute  

    trait :bob do
     name 'Bob'
     email 'bob@bob.com'
    end

    trait :carol do
     name 'Carol'
     email 'carol@carol.com'
    end

    car  { [FactoryGirl.build(:car)] }

  end

  factory :car do

    number_of_tires 4   # shared attribute

    trait :red_ford do
     make 'Ford'
     color 'Red'
    end

    trait :blue_chevy do
     make 'Chevy'
     color 'Blue'
    end

  end
end

features/step_definitions/user_steps.rb(不能正常工作)

Given /^There is a user Bob with a Blue Chevy$/ do
  FactoryGirl.create(:user, :bob, :car => [:car => :blue_chevy])
end

如果我不使用嵌入式对象特征,我可以工厂创建用户对象。有什么方法可以使用所需的特征来构建嵌入式对象?谢谢!

修复

Thoughtbot http://joshuaclayton.me的 Joshua Clayton说:

将特征应用于关联没有简写语法;基本上,你必须做这样的事情:

cars = [FactoryGirl.build(:car, :blue_chevy)]
FactoryGirl.create(:user, :bob, cars: cars)
4

1 回答 1

2

因为是1对1的关系,所以在spec/factories.rb中构建汽车对象时不需要数组

car { FactoryGirl.build(:car) }

这也适用于黄瓜步骤。另外,据我了解,特征用作属性,因此您的步骤代码应如下所示

FactoryGirl.create(:user, :bob, :car, :blue_chevy)

于 2013-03-07T08:28:49.377 回答