On 12 Jul 2014, at 15:31, Serguei Cambour <[email protected]> wrote:

> 
> 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/ClientsControllerPage
>> 
>> -- 
>> 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.
> 
WTF, it fails again...

-- 
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/55B24A25-0A3A-4C1C-8889-4BFD206708ED%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to