2016-10-04 2 views
1

Ich schrieb eine API, die letzten 5 Newsletter und sein Bild zurückgeben kann, aber ich bin stecken in Schreiben rspec Test.Rails Rspec Test mit carrierwave Bild

Zunächst ist hier die Beziehung zwischen Modell.

Newsletter has_many NewsletterImages 
NewsletterImage belong_to Newsletter 

Zweitens, dachte ich, dass ich einige Daten in Testdatenbank erstellen müssen, so schrieb ich in rspec Datei folgenden Code ein.

7.times do |i| 
    n = Newsletter.create(title: "Test#{i}", content: "TestContents#{i}") 
    2.times do |i| 
    ni = NewsletterImage.create(newsletter_id: n.id, order: i) 
    ni.image = File.open('xxx.png') 
    ni.save 
    end 
end 

Also, ich muss Datei in sehr Test hochladen? Gibt es eine bessere Möglichkeit, Daten zu generieren und zu testen?

Antwort

3

Besser zu verwenden Factory Girl, um Ihre Testdaten zu machen. Auf diese Weise können Sie wie saubere Tests schreiben

# /spec/factories/newsletter_factory.rb 
FactoryGirl.define do 
    factory :newsletter do 
    title "My newsletter" 
    content "Some content" 
    end 
end 

# /spec/factories/newsletter_image_factory.rb 
FactoryGirl.define do 
    factory :newsletter_image do 
    newsletter 
    image fixture_file_upload(Rails.root + 'spec/fixtures/images/example.jpg', "image/jpg") 
    end 
end 

# spec/models/newsletter_spec.rb 
image = create :newsletter_image 
expect(image.newsletter.title).to eq 'My Newsletter' 

Mit all den Details, wie die Modelle in der Fabrik Definitionsdateien erstellt versteckt, dann ist es einfach, den Code in vielen Tests zu teilen.

Für weitere Einzelheiten über carrierwave Dateien zu Factory Girl Definitionen Hinzufügen, suchen Sie nach anderen Antworten wie diese: https://stackoverflow.com/a/9952914/693349

+0

Danke, habe ich irgendeine Richtung. –

+0

BTW, sollte es sein Titel "Mein Newsletter" 'und' Inhalt "Einige Inhalte" ', entfernen Sie die zusätzlichen': '. –

+0

Ah, guter Fang! Bearbeitet. Vielen Dank! –

Verwandte Themen