I''m writing a web app which is used a SaS. Each customer has their own db and app directory. I have a rake task which creates all necessary minimum data to run their website: default rights and roles, a superadmin user, a "us_states" table already populated, some local depots and terminals (it''s a logistics app). I don''t have any cucumber scenarios for it and I just started building some. I''m a beginner with cucumber. I first put that task in a Given line, but that is pretty much is a given for all scenarios, and it doesn''t make much sense to non- programmers who look at the scenarios (for humans, it such a given that it doesn''t need to be expressed consciously) so I moved it into hooks.rb. My first scenario looks like this: 1 Feature: Place an order 2 In order to keep orders in the database 3 As a admin 4 I want to place orders 5 6 Scenario: Using common legs 7 Given I have 1 customers 8 And I''m on the homepage 9 And I follow "Place an Order" 10 When I select the customer 11 And I select the SSLine 12 And I click "Use Common Legs" 13 Then I should see "PICKUP AT" 14 And I should see "DELIVER TO" or "LOAD AT" 15 And I should see EMPTY RETURN 1 Before do 2 MinimumData.new(''costi'', ''1234'').populate 3 end My hooks.rb looks like this: 1 Before do 2 MinimumData.new(''costi'', ''1234'').populate #username and password 3 end I have three questions: 1. I don''t want to run this MinimumData.populate task before each scenario because it takes 8 seconds. Should I make it run just once, globally? 2. Do I have to cleanup the database with an After.do? I really don''t want to do that, because I will duplicate the logic in the After.do, only with Model.delete_all statements. I noticed that after my first run, the test db has all that data still in. I can purge it with rake db:test:purge and the reinitialize it. Is that a good practice? 3. Have you got any other comments or advice by looking at the code? -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Constantin Gavrilescu wrote:> I have three questions: > 1. I don''t want to run this MinimumData.populate task before each > scenario because it takes 8 seconds. Should I make it run just once, > globally?Don''t use seed data for running tests. I would highly recommend using a Factory framework instead. Factories allow you to create only the data actually used by individual tests. In many cases factory objects can be use in memory only and never have to touch the database. Also mocking can be used to greatly reduce the overhead you''re seeing with your seed data generation technique. http://github.com/notahat/machinist http://github.com/thoughtbot/factory_girl> 2. Do I have to cleanup the database with an After.do? I really don''t > want to do that, because I will duplicate the logic in the After.do, > only with Model.delete_all statements. I noticed that after my first > run, the test db has all that data still in. I can purge it with rake > db:test:purge and the reinitialize it. Is that a good practice?The test database should be reset after every test. You don''t want to have to deal with side-effects that cross test cases. This is why fixture data, or even better, Factory frameworks exist.> 3. Have you got any other comments or advice by looking at the code?Part of the reason your data generation takes so long is that you''re probably doing it all with Ruby and ActiveRecord. This it completely fine for a one-time population of seed data. Actually Rails provides a standard way to do that. See rake db:seed for more details on this, in case you were unaware. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 8 juil, 14:34, Robert Walker <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Constantin Gavrilescu wrote: > > I have three questions: > > 1. I don''t want to run this MinimumData.populate task before each > > scenario because it takes 8 seconds. Should I make it run just once, > > globally? > > Don''t use seed data for running tests. I would highly recommend using a > Factory framework instead. Factories allow you to create only the data > actually used by individual tests. In many cases factory objects can be > use in memory only and never have to touch the database. Also mocking > can be used to greatly reduce the overhead you''re seeing with your seed > data generation technique. > > http://github.com/notahat/machinisthttp://github.com/thoughtbot/factory_girlI was under the impression the cucumber tests have to test the real app and have to go through the real database and frankly I would like that too.> > 2. Do I have to cleanup the database with an After.do? I really don''t > > want to do that, because I will duplicate the logic in the After.do, > > only with Model.delete_all statements. I noticed that after my first > > run, the test db has all that data still in. I can purge it with rake > > db:test:purge and the reinitialize it. Is that a good practice? > > The test database should be reset after every test. You don''t want to > have to deal with side-effects that cross test cases. This is why > fixture data, or even better, Factory frameworks exist.How do I reset the data after every test? Should have been done automatically by cucumber?> > 3. Have you got any other comments or advice by looking at the code? > > Part of the reason your data generation takes so long is that you''re > probably doing it all with Ruby and ActiveRecord. This it completely > fine for a one-time population of seed data. Actually Rails provides a > standard way to do that. See rake db:seed for more details on this, in > case you were unaware.It is a one time operation. So how should I make it run only once for all cucumber tests and then who will do the cleanup after each scenario? -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Constantin Gavrilescu wrote:> On 8 juil, 14:34, Robert Walker <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >> can be used to greatly reduce the overhead you''re seeing with your seed >> data generation technique. >> >> http://github.com/notahat/machinisthttp://github.com/thoughtbot/factory_girl > > I was under the impression the cucumber tests have to test the real > app and have to go through the real database and frankly I would like > that too.Not sure what gave you that impression. I would never test with "real" data. Cucumber is really designed to replace integration tests. All testing should use either fixture data or factories. Your wanting to use seed data for your tests goes against sound testing principals, no matter how you feel about it. Ultimately it''s your project, do what you want. I''m just trying to lead you toward correct thinking.>> > 2. Do I have to cleanup the database with an After.do? I really don''t >> > want to do that, because I will duplicate the logic in the After.do, >> > only with Model.delete_all statements. I noticed that after my first >> > run, the test db has all that data still in. I can purge it with rake >> > db:test:purge and the reinitialize it. Is that a good practice? >> >> The test database should be reset after every test. You don''t want to >> have to deal with side-effects that cross test cases. This is why >> fixture data, or even better, Factory frameworks exist. > > How do I reset the data after every test? Should have been done > automatically by cucumber?Exactly, which is why Cucumber resets your database between tests. I didn''t say that you would have to reset it.>> > 3. Have you got any other comments or advice by looking at the code? >> >> Part of the reason your data generation takes so long is that you''re >> probably doing it all with Ruby and ActiveRecord. This it completely >> fine for a one-time population of seed data. Actually Rails provides a >> standard way to do that. See rake db:seed for more details on this, in >> case you were unaware. > > > It is a one time operation. So how should I make it run only once for > all cucumber tests and then who will do the cleanup after each > scenario?By "one time" I mean once after creating your production (or development) database. Possibly more that once for the development database as you migrate, reset and reload your development database. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.