Problem z rspec i database_cleaner

Witam!
Mam kolosalny problem z testami napisanymi przy użyciu Rspec oraz z wykorzystaniem database_cleanera. Ciężko opisać ten problem bo to co się dzieje z moimi testami zdaje się być totalnie losowe i nieprzewidywalne i praktycznie za każdym odpaleniem polecenia rspec dostaje inne wyniki. Raz nie przechodzi jeden test, innym razem nie przechodzą trzy a jeszcze innym wszystko jest okej. Problemy te dotyczą głównie controller oraz feature spec-ów dlatego użyje jednego z nich jako przykładu (obydwa testy w tym pliku albo przechodzą na zielono, albo jeden z nich się wysypuje [tylko jeden!]):

require 'spec_helper'

describe Api::V3::UsersController, :type => :controller do
  describe 'GET #index' do
    let(:user)    { FactoryGirl.create(:user) }
    let(:company) { user.company }

    before {
      allow(controller).to receive(:current_user)   {user}
      allow(controller).to receive(:current_tenant) {company}
    }

    it 'returns 200' do
      get :index
      expect(response.code.to_i).to eq 200
    end

    it 'assigns @users' do
      get :index
      expect(assigns(:users)).to eq [user]
    end
  end
end

Na ten przykład - podczas uruchamiania pierwszego testu, company utworzone w let istnieje w bazie więc wszystko działa okej. Kiedy jednak uruchamia się test nr. 2, rspec tworzy mi w bazie nowy rekord typu Company a tamten poprzedni kasuje. Kod testu nie bierze tego jednak pod uwagę i uruchamia kontroler “z myślą” o tym company, które zostało skasowane [pewnie przez database_cleanera] dlatego wszystko się wysypuje.

Najczęstszy scenariusz jest taki, że jeden plik z testami odpalony pojedynczo działa okej; odpalenie natomiast całego folderu specs skutkuje wysypaniem tego konkretnego pliku, który indywidualnie przeszedł na zielono.

Moja konfiguracja database_cleaner:

RSpec.configure do |config|

  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 type: :controller do
    DatabaseCleaner.strategy = :truncation
  end

  config.before type: :feature do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

Zaznaczam, że praktycznie bez względu na to jak ustawie sobie strategię dla controller i feature, to i tak dostaje losowe wyniki.

Sytuacja ta wyklucza możliwość napisania testów dla kontrolerów mojej, dosyć sporej, aplikacji co trochę spędza mi sen z powiek. Mam nadzieje, że ktoś będzie w stanie mi pomóc. Dzięki!

Czy używasz gdzieś before(:all)? Czy jesteś pewien co powoduje błąd w kontrolerze? Może testy ze strategią truncation niszczą Ci jakieś seedy ustawione na początku wszystkich testów?
Wykonaj test w kolejności: najpierw testy transaction (nic nie powinno im się dziać, niezależnie od kolejności), a później te ze strategią truncation.
Czy zawsze uruchamiasz Rspec z tą samą kolejnością, czy jest ona losowa? Ustal random seedy, które psują testy i zaobeserwuj, czy jest to stałe zachowanie.