FactoryGirl screws up Rake db:migrate process
Robię TDD / BDD w Ruby on Rails 3 z Rspec (2.11.0) i FactoryGirl (4.0.0). Mam fabrykę dla modelu kategorii:
FactoryGirl.define "Category" do
factory :category do
name "Foo"
end
end
Jeśli upuszczę, Utwórz następnie migruj bazę danych w test środowisko dostaję ten błąd:
rake aborted!
Could not find table 'categories'
Ten problem występuje, ponieważ FactoryGirl oczekuje, że tabele już istnieją (z jakiegoś dziwnego powodu). Jeśli usunę folder spec z mojej aplikacji rails i wykonam db:migrate
, to zadziała. Również jeśli zaznaczę factory-girl-rails
z mojego Gemfile
jako :require => false
to również działa (wtedy Muszę skomentować, że wymagane w celu uruchomienia rspec).
Znalazłem kilka informacji o tym problemie tutaj: https://github.com/thoughtbot/factory_girl/issues/88
Czy coś jest nie tak, że robię? Jak "przejść" etap Faktorygirl w zadaniudb:migration
? 4 answers
Myślę, że trzeba mieć taką definicję factory girl w Gemfile:
gem 'factory_girl_rails', :require => false
A potem po prostu potrzebujesz go w swoim spec_helper.RB jak to:
require 'factory_girl_rails'
W ten sposób zawsze używam tego klejnotu. Nie musisz tego wymagać w innych miejscach niż spec_helper.rb. Twoje obecne pożądane podejście jest po prostu złe.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-19 08:59:50
Prostą poprawką tego problemu jest opóźnienie oceny dowolnych modeli w fabrykach poprzez owinięcie ich w bloki. Więc zamiast tego:
factory :cake do
name "Delicious Cake"
frosting Frosting.new(:flavor => 'chocolate')
filling Filling.new(:flavor => 'red velvet')
end
Zrób to (zwróć uwagę na kręcone szelki):
factory :cake do
name "Delicious Cake in a box"
frosting { Frosting.new(:flavor => 'chocolate') }
filling { Filling.new(:flavor => 'red velvet') }
end
Jeśli masz wiele fabryk, może to nie być wykonalne, ale jest to raczej proste. Zobacz też tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-10 08:28:22
Informacje z: http://guides.rubyonrails.org/testing.html
Kiedy skończysz niszcząc swoją bazę testową (i to się stanie, zaufaj mi),
możesz go odbudować od podstaw zgodnie ze specyfikacjami zdefiniowanymi w projekcie
baza danych. Możesz to zrobić uruchamiając rake db:test:prepare
.
rake db:migrate
powyżej uruchamia wszelkie oczekujące migracje w środowisku deweloperskim
i aktualizacje db/schema.rb
. rake db:test:load
odtwarza testową bazę danych z
current db/schema.rb
. Przy kolejnych próbach, to dobrym pomysłem jest najpierw uruchomienie db:test:prepare
, ponieważ najpierw sprawdza oczekujące migracje i odpowiednio ostrzega.
rake db:test:clone Recreate the test database from the current environment’s database schema
rake db:test:clone_structure Recreate the test database from the development structure
rake db:test:load Recreate the test database from the current schema.rb
rake db:test:prepare Check for pending migrations and load the test schema
rake db:test:purge Empty the test database.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-14 13:39:37
Nie powinieneś tego robić.. Myślę, że problem polega na tym, że twój argument do FactoryGirl.zdefiniuj..
Spróbuj tego.FactoryGirl.define do
factory :category do
name "Foo"
end
end
To powinno działać dobrze, i nie psuje moich migracji lub obciążenia.. Dzisiaj musiałem naprawić problem, w którym odnosiłem się bezpośrednio do stałej modelu z mojej fabryki i musiałem umieścić ją w bloku, aby naprawić rzeczy.
FactoryGirl.define do
factory :category do
# this causes unknown table isseus
# state Category::Active
# this does not.
state { Category::Active }
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-11 22:29:48