ruby-on-rails ruby-on-rails-4 rspec rspec-rails database-cleaner

ruby on rails - DatabaseCleaner+RSpec: ¿cuál es la configuración correcta?



ruby-on-rails ruby-on-rails-4 (3)

database_cleaner gema database_cleaner en mi aplicación Rails. Seguí el ejemplo dado en el repositorio git e spec_helper el siguiente código en spec_helper :

Enfoque 1

config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end config.around(:each) do |example| DatabaseCleaner.cleaning do example.run end end

Cuando ejecuto el rspec obtengo el error como NoMethodError:undefined method ''cleaning'' for DatabaseCleaner:Module .

Así que investigué y descubrí que podía reemplazar el bloque config.around anterior por algo como esto:

Enfoque 2

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

O

Enfoque 3

config.around(:each) do |example| DatabaseCleaner.start example.run DatabaseCleaner.clean end

Tanto el Enfoque 2 como el 3 funcionan bien.
También busqué en el repositorio git de database_cleaner y encontré que el método de cleaning existe realmente y con el siguiente código:

def cleaning(&block) start yield clean end

que es exactamente igual a lo que hice en el ejemplo 3. Si existe, ¿por qué no es accesible? Me estoy perdiendo de algo. ¿Alguna más configuración? ¿O es el enfoque 2 o 3 preferible?


Finalmente encontré la respuesta,

database_cleaner gema database_cleaner agregó el método de cleaning semana pasada y también actualizó la documentación para la misma. PERO este cambio no está disponible en la última versión de gema 1.2.0 que obtuve de rubygems.org. Approach 1 funciona perfectamente cuando github la gema de github como se muestra a continuación:

gem ''database_cleaner'', git: ''[email protected]:DatabaseCleaner/database_cleaner.git''


Puedes usar el enfoque en la documentación si extraes la gema de Github

gem ''database_cleaner'', git: ''[email protected]:bmabey/database_cleaner.git''


Si tiene este mismo problema al usar mongoid, puede agregarlo a Gemfile, cambiar la versión que más le convenga y ejecutar bundle install.

gem ''database_cleaner'', ''~> 1.4.1''

Luego crea una carpeta de soporte en

spec/support/database_cleaner.rb

Requerir database_cleaner.rb en su archivo spec_helper, yo uso gem ''require_all'' manera:

# spec/spec_helper.rb require ''require_all'' require_rel ''support''

Agregue los siguientes limpiadores a database_cleaner.rb

RSpec.configure do |config| # Cleanup the DB in between test runs config.before(:suite) do DatabaseCleaner[:mongoid].strategy = :truncation DatabaseCleaner[:mongoid].clean_with(:truncation) end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end end

Sus pruebas ahora deberían demolerse correctamente.