As people have pointed out, using DB foreign key constraints within rails can be a nightmare when it comes to fixtures. In the past when I have used DB constraints I have always disabled the constraints when loading the fixtures so it wouldn't be an issue. The way I did it was the following: class Fixtures alias :original_delete_existing_fixtures :delete_existing_fixtures alias :original_insert_fixtures :insert_fixtures
def delete_existing_fixtures @connection.update "SET FOREIGN_KEY_CHECKS = 0", 'Fixtures deactivate foreign key checks.'; original_delete_existing_fixtures @connection.update "SET FOREIGN_KEY_CHECKS = 1", 'Fixtures activate foreign key checks.'; end def insert_fixtures @connection.update "SET FOREIGN_KEY_CHECKS = 0", 'Fixtures deactivate foreign key checks.'; original_insert_fixtures @connection.update "SET FOREIGN_KEY_CHECKS = 1", 'Fixtures activate foreign key checks.'; end end Note, that this is MySQL specific and I would place this is my test_helper.rb (this was pre-rSpec.) I have not used this code with rpsec but since rspec uses rails Fixtures class (right?) you should be able to use this as well. -Ben Jim Deville wrote: > On Aug 27, 2007, at 8:08 AM, David Chelimsky wrote: > > >> On 8/27/07, Jay Levitt <[EMAIL PROTECTED]> wrote: >> >>> Tilmann Singer wrote: >>> >>>> * Jay Levitt <[EMAIL PROTECTED]> [20070827 03:51]: >>>> >>>>> What's rake doing differently? >>>>> >>>> rake spec isn't doing anything fundamentally different, but the >>>> order >>>> the specs are run is propably randomly different from when you run >>>> them with spec so they happen to pass in one case and fail in the >>>> other. >>>> >>> Nope, it's definitely not random - script/spec works every time, rake >>> fails every time. >>> >> By default, the spec.opts file, which is loaded w/ the rake task, but >> not implicitly with the script/spec command, uses --reverse, so the >> files are run in reverse order. That would support Tilmann's theory >> combined with your observation that they consistently pass one way and >> fail the other. >> >> This information should shed some light on your questions below as >> well. >> >> Cheers, >> David >> >> > > Just wondering about your usage of constraints. We ran into this > issue recently and came to the conclusion that unless profiling shows > an issue, use AR to enforce referential integrity. You might be able > to get by using :dependent => :destroy, or one of the other options. > As for the indexing, you can set it up on your own using add_index in > the migration. That helps save us the headaches of migrations and > fixture issues. > > Just an idea. > > Jim > > >>> I'm not actually using :accounts at all in my specs; it's only >>> referenced in the database constraints. (It's tested in >>> Test::Unit at >>> the moment.) So the order wouldn't matter. >>> >>> I'm sure I can work around it by loading all the fixtures in some >>> order >>> that makes the database happy; I'm more curious as to why it happens >>> with "rake spec", and not with (what seems to be) the equivalent >>> script/spec command. >>> >>> Unfortunately, test.log doesn't show me anything that happens >>> during the >>> failed rake run. I'll have to see if there's a way to turn up >>> logging >>> on MySQL itself to see what's different, or maybe switch to a TCP >>> socket >>> and use Wireshark (nee Ethereal). >>> >>> Jay >>> >>> >>> >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-users@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >>> >>> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users