Manifesto:
-
create a database for testing that is easily created, is pre-populated with minimal configuration, whose tables are associated correctly, is quickly rolled back between tests, and is correct, every time.
-
should have a way of doing it all by hand but should default to populating the db for you.
ToDo:
-
Done - get it working with sqlite3
-
Done - read in all models
-
record attribute information in a test db
- need a method to open the database - need a method to create/write to the database table generic data
-
record association information
-
for each association (habtm, has_many, has_one, belongs_to, etc.),
-
if it uses a join table, or is owned/owns another model
-
find the join table, or child table
-
make sure id’s and foreign keys line up.
-
-
-
-
write it to the database with a function call?
-
reset the database with a function call?
-
drop the database with a function call?
Discussion: Maybe I can use populator and faker to add data to the database…
There are definitely a couple of different ways I can go with this: one, I can create the factory files via meta programming, and have them loaded as usual using begin-end block in env.rb (slow but db agnostic) two, I can create the database from scratch and roll it back somehow whenever you tell it to roll back (faster but need to know the database) three, I can somehow get into the model instances that are created in the development environment…not sure how to do this from ‘RAILS_ENV=test’ four, I can use ActiveRecord::Base class methods to record attributes and associations of the db tables (i.e. reflect_on_association), and then create the test database on the fly whenever needed. (this sounds like the best solution, so I can completely forget about factory_girl, and I am not reinventing the activerecord wheel by trying to parse model files, yet I am properly recording my associations, creating the test database correctly, and reusing it as many times as I want) (maybe there’s a formal rollback method for the test database connection, I think I saw one…) (lets just hope I can use all of the AR class methods from the test env when needed. Update: yes!!! Even without tables created and filled out w/AR, I can use class methods to study/use associations and attributes…fantastic)
-
May want to read from the models… that way, we can stay db agnostic…
- can we use reflect_on_association??? is this too hard?
- how can we structure this so that it makes sense? are we replicating effort? - we could require the model files, create instances in memory without writing to the db, then when we have to, write to the test db. - want to have it in memory the way you want it, and write to the db at each iteration instead of recreating the database manually. - we should stay away from the database itself until we write it… to the test db at each interval - get it working with cucumber first… - construct the data automatically, minimal effort to construct factories yall… - the instances should be created with restrictions in mind - should Steamer be of type ActiveRecord::Base to take advantage of reflect on association?
-
read from database
-
write it to factory directory in rb files
-
instantiate it correctly in env.rb or wherever the factories are normally created (cucumber, rspec, etc.)
-
get associations made correctly using model associations
-
test out the factories
-
write some specs
-
we want to have a version of the database that we can go back to…