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.