validar rails formularios formulario ruby-on-rails validation rspec spork

ruby on rails - rails - Spork: ¿cómo actualizar las validaciones y otros códigos?



formularios en ruby on rails (4)

Con las versiones más recientes de Factory Girl, no necesitas hacer mucho. Primero, agregue FactoryGirl.reload en Spork.each_run . Si tiene fábricas con el parámetro de class , deben ser de cadena.

factory :my_model, class: ''MyModel'' do...

en lugar de

factory :my_model, class: MyModel do...

He estado usando Spork todo el día, y la mayoría del tiempo es realmente genial.

Sin embargo, a menudo me encuentro con algunos problemas en los que necesito reiniciar Spork para que pasen mis pruebas ... y ahora me pregunto si es más problema de lo que vale. Soy nuevo en ruby, por lo que a veces no puedo predecir si el error se debe a un problema de actualización, o si el error se debe a que no estoy familiarizado con Ruby y Rails.

¿Qué debo poner en el bloque Spork.each_run para que mis validaciones y otras cosas se actualicen de modo que no tenga que reiniciar el servidor spork?

Gracias




EDITAR: Si puede actualizar a Ruby 2.0 esta es su mejor apuesta. Es lo suficientemente rápido y le permitirá trabajar de manera regular sin necesidad de herramientas como Spork, Zeus y ect. Y en esencia no necesitarás nada de lo que escribí a continuación.

Si aún necesitas un golpe de velocidad mientras desarrollas, revisa los comandos Fast Rails Commands .

Bueno, sí, desea volver a cargar Spork si cambió los archivos de entorno, inicializador o spec_helper (y para ese guard-spork es perfecto), pero no cuando actualizó una de sus clases (modelos), ya que esto negaría el propósito de herramientas como spork . Tenía el mismo problema: podía eliminar todos los métodos en un modelo, y las pruebas seguirían pasando, porque Spork tiene la clase de modelo "antiguo" en la memoria. Fue necesario reiniciar Spork.

Razón:

Algunos complementos hacen que el código del modelo se cargue previamente, por lo que se requiere cierto trabajo para evitar que suceda.

Desea evitar que el código del modelo se cargue previamente, ya que esto no los "volverá a cargar" si realiza cambios (como con las validaciones).

Soluciones:

Depende de las gemas que estén involucradas. En mi caso, tuve que lidiar con Devise y FactoryGirl, pero en esencia, lo haces usando Spork.trap_method como se describe en wiki: https://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujitsu

Además, puede ejecutar spork -d para obtener una lista de los archivos que están precargados, puede ser útil rastrear qué gemas pueden estar involucradas para causar este problema.

Ejemplo: Rails 3.0.x + Rspec2 + Spork 0.9.0.rcX + Capybara + Devise + FactoryGirl

# spec/spec_helper.rb Spork.prefork do # This file is copied to spec/ when you run ''rails generate rspec:install'' ENV["RAILS_ENV"] ||= ''test'' require File.expand_path("../../config/environment", __FILE__) require ''rspec/rails'' require ''capybara/rspec'' require ''capybara/rails'' # set "gem ''factory_girl'', :require => false" in Gemfile require ''factory_girl'' # deal with Devise require "rails/application" Spork.trap_method(Rails::Application, :reload_routes!) require File.dirname(__FILE__) + "/../config/environment.rb" Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.mock_with :rspec config.use_transactional_fixtures = false config.before(:suite) do DatabaseCleaner.strategy = :transaction end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end # Devise controller test helpers: config.include Devise::TestHelpers, :type => :controller end end Spork.each_run do # deal with factory girl Factory.definition_file_paths = [File.join(Rails.root, ''spec'', ''factories'')] Factory.find_definitions end

Tenga en cuenta que config.cache_classes = true debe establecer en true en el entorno de prueba, de lo contrario puede obtener errores de gemas como FactoryGirl.

Esto hizo que mis pruebas de modelo (especificaciones) se ejecutaran rápidamente y las "recarguen" cada vez que guardo un archivo y ejecuto rspec.

EDITAR: Si se está ejecutando en Ruby 1.9.3 puede probar una alternativa interesante: Zeus - https://github.com/burke/zeus