On Saturday, July 12, 2014 1:15:42 PM UTC-7, Javix wrote:
>
> On 11 Jul 2014, at 17:53, Myron Marston 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/ClientsControllerPage
>
> WTF, it fails again...
>
If you can put together a reproducible example, open an issue and we'll
take a look. It's hard (nearly impossible) for us to debug remotely based
on the limited information you've given us.
Myron
--
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/6006d3c5-44bc-4a31-a958-818fea50d752%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.