2010-10-11 12 views
11

Ich bin dabei, meine Anwendung auf Rails 3 zu aktualisieren. Ich begann Rspec 2 mit Rails 3 zu verwenden. Ich muss transaktionale Fixtures für einige meiner rspec-Tests deaktivieren . Vor verwendete ich den folgenden Code in meinem Modell SpezifikationenRails 3 und Rspec 2 schalten transaktionale Fixtures für einzelne Tests aus

before(:all) do 
    ActiveSupport::TestCase.use_transactional_fixtures = false 
    end 

    after(:all) do 
    ActiveSupport::TestCase.use_transactional_fixtures = true 
    clean_engine_database 
    end 

dass mir jetzt den Fehler gibt:

Failure/Error: ActiveSupport::TestCase.use_transactional_fixtures = false 
    undefined method `use_transactional_fixtures=' for ActiveSupport::TestCase:Class 

Gibt es eine Möglichkeit, dies mit Rspec 2 in Rails 3 pro Testblock zu tun?

+1

mögliche Duplikate von [Deaktivieren transaktionaler Fixtures für eine Spezifikation mit RSpec 2] (http://stackoverflow.com/questions/3853098/turn-off-transactional-fixtures-for-one-spec-with-rspec-2) – shingara

+1

das scheint nicht doppelt zu sein. sie sind nur verwandt. –

Antwort

19

Ich bin auf der Suche nach der Antwort auf diese Frage kam über this blog entry

Es in der Beschreibung zu erklären, schlägt Block

describe "xxx" do 
    self.use_transactional_fixtures = false 
    ... 

Ich habe es mit Rails 3.0.7 mit RSpec 2.6.3 ausprobiert und es sieht so aus als würde es funktionieren.

+3

Schön. Ich habe festgestellt, dass Sie es auch am Anfang eines "Kontext" -Blocks platzieren können, und es wird nur auf Tests angewendet, die darin enthalten sind. – Kelvin

+1

Funktioniert gut (und genauso) mit Rails 3.2.2 und Mini-Test 2.5.1 – eclectic923

+1

Update: Die Verwendung dieser jetzt gibt die Warnung 'DEPRECATION WARNING: use_transactional_fixtures = ist veraltet und wird aus Rails 5.1 entfernt (use_transactional_tests = stattdessen) '. 'self.use_transactional_tests = false' funktioniert jedoch einwandfrei. – amingilani

0

Sie können transaktionale Fixtures global deaktivieren, indem Sie config.use_transactional_fixtures = false auf spec_helper.rb setzen. Wenn Sie sie testweise steuern möchten (z. B. Transaktionsdaten nur für einige von ihnen verwenden), können Sie dieses Verhalten mit DatabaseCleaner festlegen.

Ich hatte ein verwandtes Problem beim Testen von Seiten mit Javascript im Browser (ein Szenario, das nicht mit transaktionalen Fixtures funktioniert). Hier ist, wie ich es geschafft, um es an die Arbeit: http://github.com/lailsonbm/contact_manager_app

0
RSpec.configure do |config| 
    config.use_transactional_fixtures = true 
end 
+0

Das hat nicht funktioniert. Ich lege das in das Vorher (: alle) und es scheint nicht zu funktionieren. Ich erhalte immer noch diesen Fehler, der normalerweise dadurch gelöst wird, dass Transaktions-Fixtures für den Test deaktiviert werden. PGError: FEHLER: SET TRANSACTION ISOLATION LEVEL muss vor jeder Abfrage aufgerufen werden – Nicolo77

+2

Sie sollten diesen Code außerhalb eines ': all' oder' describe' Blocks platzieren. Die Datei spec_helper.rb ist ein guter Platz, wenn Sie dies global einstellen möchten. Und ich denke David wollte "falsch" anstatt "wahr" sagen. –