SORU
5 NİSAN 2012, PERŞEMBE


Nasıl Fabrika Kızı dizisi, bir karma tanımlamak için?

Bir Dizi beni geri veri verir Dropbox uykusu servisinden bir dönüş değerleri simüle eden bir test yazmak için, iç içe karma ile çalışıyorum.

Sorun neden olan bir dizi dönüş içinde olduğundan fabrikamı kodu nasıl sergiyi yaşıyorum. Burada ne gider?

Factory.define :dropbox_hash do
 ??
end

Dropbox veri bu gibi görünüyor:

 ["/home", {"revision"=>48, "rev"=>"30054214dc", "thumb_exists"=>false, "bytes"=>0, "modified"=>"Thu, 29 Dec 2011 01:53:26  0000", "path"=>"/Home", "is_dir"=>true, "icon"=>"folder_app", "root"=>"app_folder", "size"=>"0 bytes"}] 

Ve benim RSpec bu fabrika gibi bir telefon istiyorum

Factory.create(:dropbox_hash)

CEVAP
19 AĞUSTOS 2012, Pazar


Aynı şeyi yapmak isteyen, ayrıca 3. parti API bir içerik karmasını kullanarak çalışır benim bir modeli test ettim. Yerleşik factory_girl özellikleri olan bir kaç kullanarak temiz bir şekilde veri yapıları bu tür inşa etmek mümkün olduğunu gördüm.

İşte yapmacık bir örnek:

  factory :chicken, class:Hash do
    name "Sebastian"
    colors ["white", "orange"]

    favorites {{
      "PETC" => "http://www.petc.org"
    }}

    initialize_with { attributes } 
  end

Asıl numara burada initialize_with, factory_girl bildirdiğinizde artık sonuç nesne öznitelikleri atamak için çalışacaktır. O da bu durumda db deposu atlamak gibi görünüyor. Bu yüzden, karmaşık bir şeyler inşa etmek yerine, biz sadece bizim içerik olarak zaten hazır öznitelik karma arkaya verin. Voila.

Gerekli sınıf için bir değer, öyle değil aslında kullanılan rağmen belirtmek için görünüyor. Bu bir sınıf Fabrikası adına göre oluşturmaya çalışan factory_girl önlemektir. Nesne yerine açıklayıcı sınıfları kullanmak için seçtim, ama bu size kalmış.

Bu karma fabrikalarından birini kullandığınızda, hala alanlar geçersiz kılmak mümkün olacaktır:

chick = FactoryGirl.build(:chicken, name:"Charles")

eğer içerik iç içe ve derin alanları geçersiz kılmak istiyorsanız ancak, başlatma bloğu karmaşıklığı derin bir tür yapmak gerekir ..birleştirme.

Senin durumun biraz karışık dizi ve karma veri kullanıyor ve Path özelliği veri yapısı bölümleri arasında kullanılmaması gerekir gibi görünüyor. Hiç sorun değil - kolay doğru sonucu oluşan bir dizi oluşturur bir fabrika oluşturmak için içerik yapısı. Bunu yapabilirim:

  factory :dropbox_hash, class:Array do
    path "/home"
    revision 48
    rev "30054214dc"
    thumb_exists false
    bytes 0
    modified { 3.days.ago }
    is_dir true
    icon "folder_app"
    root "app_folder"
    size "0 bytes"

    initialize_with { [ attributes[:path], attributes ] }
  end

  FactoryGirl.build(:dropbox_hash, path:"/Chickens", is_dir:false)

Ayrıca hala gereksiz değerleri atlamak için ücretsiz. Hadi sadece Yol ve devir gerçekten gerekli mi hayal:

  factory :dropbox_hash, class:Array do
    path "/home"
    rev "30054214dc"
    initialize_with { [ attributes[:path], attributes ] }
  end

  FactoryGirl.build(:dropbox_hash, path:"/Chickens", revision:99, modified:Time.now)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Call Me Howard

    Call Me Howa

    18 AĞUSTOS 2012
  • Hallucination Land

    Hallucinatio

    14 Ocak 2011
  • happyjpy

    happyjpy

    22 AĞUSTOS 2009