2013-09-30 8 views
6

Updated Próbuję dostać Dziewczyna z fabryki, aby wypełnić mój „data wydania” pole z datą, losowej daty, szczerze dowolną datę w tej chwili, bo wciąż otrzymuję "Validation nie powiodło się: data wydania nie może być puste "błędy, gdy uruchomię moje item_pages_spec.rbJak sprawić, by dziewczyna z fabryki utworzyła datę?

Po jakiejś pomocy poniżej, jego jest to, co mam w moim factory.rb na stronach przedmiotów, ale próbowałem teraz wielu różnych rzeczy.

factory :item do 
    sequence(:name) { |n| "Item #{n}" } 
    release_date { rand(1..100).days.from_now } 
    end 

Idealnie byłoby wierszem, który tworzy różne losowe daty dla każdej wyprodukowanej fabrycznie instancji przedmiotu.

Data premiery nie może być pusta, ponieważ w moim modelu przedmiotu mam validates :release_date, presence: true. Idealnie byłoby tam zatwierdzenie, które upewnia się, że podana data jest datą, ale również akceptuje NIL, ponieważ nie zawsze będę mieć dostępną datę.

Każda pomoc bardzo ceniona. Nie mogłem znaleźć nic konkretnego online o dziewczynie z fabryki i datach.

model

class Item < ActiveRecord::Base 
validates :name, presence: true, length: { maximum: 50 } 
validates :release_date, presence: true 

koniec

Item_pages_spec.rb

require 'spec_helper' 

describe "Item pages" do 

    subject { page } 

describe "Item page" do 
    let(:item) { FactoryGirl.create(:item) } 
    before { visit item_path(item) } 

    it { should have_content(item.name) } 
    it { should have_title(item.name) } 
end 
end 
+0

'RELEASE_DATE {rand (1..100) .days.from_now}' pamiętać, że można wstawić dowolny zakres w 'funkcji rand'. Btw, [przeczytaj dokument proszę] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) – j03w

+0

Przeczytałem dokument i wypróbowałem z niego kilka rozwiązań. Wygląda na to, że problemem jest mój walidator, ponieważ ani twoje rozwiązanie, ani te poniżej nie przekazują moich testów. Będę musiał znaleźć lepszą alternatywę dla "sprawdzania poprawności" data_publikacji, obecność: prawda ", ponieważ jestem pewien, że zarówno twój powinien działać. Dziękuję, – Ossie

+0

opublikować swój model i fragment kodu testowego? – j03w

Odpowiedz

4

Pozwoli to ustalić datę od teraz do 2 lat od teraz, ustawić params (lub metody extract) W razie potrzeby:

factory :item do 
    sequence(:name) { |n| "Item #{n}" } 
    release_date do 
    from = Time.now.to_f 
    to = 2.years.from_now.to_f 
    Time.at(from + rand * (to - from)) 
    end 
end 
+0

To wygląda świetnie, ale wciąż daje mi błąd "Data wydania nie może być pusta" Bardzo zmieszany Zgaduję, że to oznacza, że ​​mój problem jest gdzie indziej. – Ossie

+0

Fabryka, którą napisałem jest ważna, nie mogę powiedzieć, dlaczego walidator narzeka – apneadiving

6

Faker klejnot ma bardzo miły sposób to:

Faker::Date.between(2.days.ago, Date.today)