2010-10-11 24 views
11

Estoy en el proceso de actualizar mi aplicación a Rails 3. Empecé a usar Rspec 2 con Rails 3. Necesito desconectar dispositivos transaccionales para algunas de mis pruebas rspec . Antes he utilizado el siguiente código en las especificaciones de mi modeloRails 3 y Rspec 2 apagan dispositivos transaccionales para pruebas individuales

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

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

Que ahora me da el error:

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

¿Hay una manera de hacer esto por bloque de prueba en Rails 3 con Rspec 2?

+1

posible duplicado de [Desactivar dispositivos transaccionales para una especificación con RSpec 2] (http://stackoverflow.com/questions/3853098/turn-off-transactional-fixtures-for-one-spec-with-rspec-2) – shingara

+1

esto no parece ser duplicado. solo están relacionados. –

Respuesta

19

estoy buscando la respuesta a esta pregunta, se encontró con this blog entry

Sugiere a declarar dentro del describa bloque

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

Lo intenté con Rails 3.0.7 con RSpec 2.6.3, y parece que funciona.

+3

Agradable. Descubrí que también puedes ponerlo al principio de un bloque de 'contexto', y solo se aplicará a las pruebas dentro de él. – Kelvin

+1

Funciona muy bien (y de la misma manera) con los rieles 3.2.2 y mini-prueba 2.5.1 – eclectic923

+1

Actualización: Al usar esto ahora aparece la advertencia 'DEPRESIÓN ADVERTENCIA: use_transactional_fixtures = está en desuso y se eliminará de Rails 5.1 (use use_transactional_tests = en cambio) '. Sin embargo, 'self.use_transactional_tests = false' funciona bien. – amingilani

0

Puede desactivar dispositivos transaccionales globalmente poniendo config.use_transactional_fixtures = false en el spec_helper.rb. Si desea controlarlos mediante prueba (por ejemplo, use transaccional solo en algunos de ellos), puede establecer este comportamiento con DatabaseCleaner.

Tuve un problema relacionado al probar páginas con javascript en el navegador (un escenario que no funciona con dispositivos transaccionales). Así es como me las arreglé para trabajar alrededor de ella: http://github.com/lailsonbm/contact_manager_app

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

Esto no funcionó. Puse esto en el antes (: todo) y no parece funcionar. Todavía recibo este error, que generalmente se resuelve desactivando los dispositivos transaccionales para la prueba. PGEror: ERROR: SET TRANSACTION ISOLATION LEVEL debe llamarse antes de cualquier consulta – Nicolo77

+2

Debe poner este código fuera de cualquier bloque ': all' o' describe'. El archivo spec_helper.rb es un buen lugar si quieres configurarlo globalmente. Y creo que David quiso decir 'falso' en lugar de' verdadero'. –

Cuestiones relacionadas