test setup run rails practices mini juego best ruby minitest

setup - run test ruby



¿Cómo apago un método para generar un error usando Ruby MiniTest? (2)

Estoy intentando probar una rama del controlador Rails que se activa cuando el método del modelo genera un error.

def my_controller_method @my_object = MyObject.find(params[:id]) begin result = @my_object.my_model_method(params) rescue Exceptions::CustomError => e flash.now[:error] = e.message redirect_to my_object_path(@my_object) and return end # ... rest irrelevant end

¿Cómo puedo obtener un talón de Minitest para provocar este error?

it ''should show redirect on custom error'' do my_object = FactoryGirl.create(:my_object) # stub my_model_method to raise Exceptions::CustomError here post :my_controller_method, :id => my_object.to_param assert_response :redirect assert_redirected_to my_object_path(my_object) flash[:error].wont_be_nil end


Una forma de hacerlo es usar Mocha, que Rails carga de forma predeterminada.

it ''should show redirect on custom error'' do my_object = FactoryGirl.create(:my_object) # stub my_model_method to raise Exceptions::CustomError here MyObject.any_instance.expects(:my_model_method).raises(Exceptions::CustomError) post :my_controller_method, :id => my_object.to_param assert_response :redirect assert_redirected_to my_object_path(my_object) flash[:error].wont_be_nil end


require "minitest/autorun" class MyModel def my_method; end end class TestRaiseException < MiniTest::Unit::TestCase def test_raise_exception model = MyModel.new raises_exception = -> { raise ArgumentError.new } model.stub :my_method, raises_exception do assert_raises(ArgumentError) { model.my_method } end end end