tests test_helper test run rails how ruby-on-rails ruby-on-rails-3 unit-testing rspec

ruby-on-rails - test_helper - rspec rails



Al realizar pruebas con rspec, ¿dónde colocar los “métodos de utilidad de prueba” comunes? (2)

Supongamos que tienes un sitio de compras que vende widgets. Sin embargo, el inventario de cada widget es limitado, por lo que es importante mantener actualizado el número "widget.number_still_available".

Me gustaría escribir una prueba rspec a lo largo de las líneas de

it "always displays the correct number still available" do # Assume there is a before method that sets up a widget with 5 available widget.number_still_available.should == 5 # User "[email protected]" purchases 2 widgets widget.number_still_available.should == 3 # User "[email protected]" purchases 1 widget widget.number_still_available.shhould == 2 # User "[email protected]" cancels purchase of 1 widget widget.number_still_available.should == 4 end

Me gustaría poder escribir métodos de solo prueba que realicen los métodos de "compra" y "cancelación". Estas acciones no se corresponden con ningún método "real" en mis modelos por una variedad de razones (lo más importante es que hay un sistema de back-end desacoplado en PHP que realiza parte de las acciones de compra y cancelación).

¿Dónde está el lugar correcto para colocar este código al usar RSpec? En pepino, podría escribir un par de pasos, pero no estoy seguro de cuál es el equivalente correcto para RSpec.


Puede colocar un monkeypatch en spec_helper.rb , o directamente en la parte superior del archivo de especificaciones si solo se usa para ese archivo.

Sería más claro y seguro hacer métodos auxiliares que usen métodos de clase existentes, en lugar de agrupar las clases.


Sugeriría hacer un nuevo archivo en spec/support llamado purchase_helpers.rb y poner este contenido en él:

module PurchaseHelpers def purchase_widgets(user, count=1) # Code goes here end def cancel_purchase(user, count=1) # Code goes here end end RSpec.configure do |c| c.include PurchaseHelpers end

La ventaja de hacer esto en lugar de incluirlo en spec/spec_helper.rb es que no está spec/spec_helper.rb ese archivo con un montón de código no relacionado con la configuración de RSpec. Separar las cosas es la mejor manera de hacer las cosas.