I’m trying to use fixtures to add more complex test data in order to test specific scenarios with the front-end, which is in Flex. I’m not sure this is the right way to go about it with rails. My rails app is a card game and the ‘more complex test data’ I’m trying to test are various combinations of cards.
For example, I want to set up a test game where player 1 has cards B and C in hand, where I’ve specifically added cards B and C to the player’s hand in a fixture.
I have basic fixtures for players, games, and users, which have been there for awhile and working fine. I’ve tried to add the following erb code in the games fixture, to invoke the Game.start method, and am getting
NoMethodError: undefined method `games' for main:Object
The fixture code snippet is :
four:
id: 4
num_players: 3
turn_num: 0
status_id: 1
<% game_four = games(:four).find
game_four.start
%>
games method exists only in test cases, not in fixtures.
You should either query the database or use relationships.
This is just an example.
Also, this is not really the right place for such command. Fixtures are not intended “to start games”.
You should really move this command elsewhere, perhaps in a dedicated test case within the setup block.
EDIT:
I copy here my comment posted a couple of days ago on the original answer with a link to the new Rails Database Seeding feature: http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding
This is the one explained by Yehuda Katz in his answer and definitely the best way to solve this problem.