आरएसपीसी और फैक्टरी गर्ल के लिए नया, और इस लड़ाई को खोने के सत्यापन के साथ सत्यापन के माध्यम से है।परीक्षण आरएसपीसी 2.9.0 + फैक्टरीगर्ल 3.2
मेरे पास एक टेबल टेबल MealItems है जिसमें इसकी एक संपत्ति पर सत्यापन है। रेल कंसोल में मैं सफलतापूर्वक कर सकते हैं:
meal = Meal.create!(...)
food = Food.create!(...)
item1 = MealItem.create!(meal, food, 1234) # 1234 being the property that is required
मैं तो पूर्ण रूप से अपने खाद्य पदार्थों की एक सरणी एक भी भोजन में MealItem के माध्यम से इस तरह प्राप्त कर सकते हैं:
meal.foods
समस्या यह है कि मैं नहीं कर सकता कारखानों को सही तरीके से बनाने का तरीका जानें ताकि यह संबंध spec में उपलब्ध हो। मैं एक भोजन करने के लिए आइटम प्रदान कर सकते हैं, और उन का परीक्षण, लेकिन रिश्ते काम कर (meal.foods) के माध्यम से has_many नहीं मिल सकता है
मॉडल
class Meal < ActiveRecord::Base
has_many :meal_items
has_many :foods, :through => :meal_items
end
class MealItem < ActiveRecord::Base
belongs_to :meal
belongs_to :food
validates_numericality_of :serving_size, :presence => true,
:greater_than => 0
end
class Food < ActiveRecord::Base
has_many :meal_items
has_many :meals, :through => :meal_items
end
कल्पना/factories.rb
FactoryGirl.define do
factory :lunch, class: Meal do
name "Lunch"
eaten_at Time.now
end
factory :chicken, class: Food do
name "Western Family Bonless Chicken Breast"
serving_size 100
calories 100
fat 2.5
carbohydrates 0
protein 19
end
factory :cheese, class: Food do
name "Armstrong Light Cheddar"
serving_size 30
calories 90
fat 6
carbohydrates 0
protein 8
end
factory :bread, class: Food do
name "'The Big 16' Multigrain Bread"
serving_size 38
calories 100
fat 1
carbohydrates 17
protein 6
end
factory :item1, class: MealItem do
serving_size 100
association :meal, factory: :lunch
association :food, factory: :chicken
end
factory :item2, class: MealItem do
serving_size 15
association :meal, factory: :lunch
association :food, factory: :cheese
end
factory :item3, class: MealItem do
serving_size 76
association :food, factory: :bread
association :meal, factory: :lunch
end
factory :meal_with_foods, :parent => :lunch do |lunch|
lunch.meal_items { |food| [ food.association(:item1),
food.association(:item2),
food.association(:item3)
]}
end
end
कल्पना/मॉडल/meal_spec.rb
...
describe "Nutritional Information" do
before(:each) do
#@lunch = FactoryGirl.create(:meal_with_foods)
@item1 = FactoryGirl.create(:item1)
@item2 = FactoryGirl.create(:item2)
@item3 = FactoryGirl.create(:item3)
@meal = FactoryGirl.create(:lunch)
@meal.meal_items << @item1
@meal.meal_items << @item2
@meal.meal_items << @item3
@total_cals = BigDecimal('345')
@total_fat = BigDecimal('7.5')
@total_carbs = BigDecimal('34')
@total_protein = BigDecimal('35')
end
# Would really like to have
#it "should have the right foods through meal_items" do
#@meal.foods[0].should == @item1.food
#end
it "should have the right foods through meal_items" do
@meal.meal_items[0].food.should == @item1.food
end
it "should have the right amount of calories" do
@meal.calories.should == @total_cals
end
...
मेरा प्रश्न है:
मैं कैसे सेटअप इन कारखानों तो मैं Meal.foods मेरी परीक्षणों में संदर्भित कर सकते हैं के रूप में मैं क्योंकि तालिका में शामिल होने पर सत्यापन की आवश्यकता का भोजन करने के लिए सीधे खाद्य पदार्थ नहीं सौंप सकते। क्या मैं टेस्ट के दौरान डीबी को मेलीटैम कारखानों को सही ढंग से नहीं लिख रहा हूं, और यही कारण है कि रिश्तों के माध्यम से हैसनी मेरे spec में मौजूद नहीं है?
किसी भी मदद की बहुत सराहना की जाती है।