On 11 Jul 2014, at 17:53, Myron Marston <[email protected]> wrote:
> On Wednesday, July 9, 2014 1:24:33 PM UTC-7, Javix wrote:
> I can't figure out why my example fails sometimes and sometimes not:
>
> describe ClientsController do
> let(:admin) { create(:admin) }
>
> before(:each) { sign_in admin }
>
> describe 'GET #index' do
> Client.delete_all
> let!(:clients) { Array.new(3) { create(:client) } }
> it "populates an array of all clients" do
>
> get :index
> expect(assigns(:clients)).to match_array(clients)
> end
>
> it "renders the :index template" do
> get :index
> expect(response).to render_template :index
> end
> end
> end
>
> I set up DatabaseCleaner as follows in spec_helper:
>
> config.before(:suite) do
> DatabaseCleaner.clean_with(:truncation)
> end
>
> config.before(:each) do
> DatabaseCleaner.strategy = :transaction
> end
>
> config.before(:each, js: true) do
> DatabaseCleaner.strategy = :truncation
> end
>
> config.before(:each) do
> DatabaseCleaner.start
> end
>
> config.after(:each) do
> DatabaseCleaner.clean
> end
>
> and set up fixtures to false as well (spec_helper):
>
> config.use_transactional_fixtures = false
>
> No matter if I keep the line or not:
>
> Client.delete_all
>
> it fails the first time (when I run all the tests) and passes when I run the
> spec separately.
>
> I also defined a shared_db_connection in support folder:
>
> class ActiveRecord::Base
> mattr_accessor :shared_connection
> @@shared_connection = nil
>
> def self.connection
> @@shared_connection || retrieve_connection
> end
> end
> ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
>
> For a more complete description of this setup, check out Avdi Grimm's
> Virtuous Code blog:
>
> http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/
>
> Any idea? THANK YOU
>
> The `Client.delete_all` line is problematic in that it runs at spec file load
> time, and many other examples can be run between that point and the examples
> you've listed run. If any other examples create client records you're going
> to hit problems like you're seeing. Instead, wrap it in a `before(:all)`
> hook if you want it to run once before all examples in that group.
>
> That said, I question the need for it at all; your environment is setup to
> truncate the DB before the first example runs and then wrap each example in a
> transaction, so there shouldn't be any client records in the DB to be
> deleted...unless you have some records being put into the DB outside the
> scope of an example (e.g. in an example group body or a `before(:all)` hook).
> And if you do have that kind of thing -- well, that's probably what's
> causing the problem.
>
> HTH,
> Myron
Thank you Myron for the reply.
So I removed completely Client_delete_all statement as it is managed by
DatabaseCleaner truncation feature.
And my features/ClientsPageSpec passes now.
Thank you.
>
> --
> You received this message because you are subscribed to a topic in the Google
> Groups "rspec" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/rspec/bwqHFUsldbg/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rspec/99fcd847-9c68-4684-a396-4157d9412816%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rspec/23BF8FBB-1E1A-4831-B770-5A79CD533122%40gmail.com.
For more options, visit https://groups.google.com/d/optout.