2012-06-12 15 views
14

मैं एक रेल नियंत्रक शाखा का परीक्षण करने की कोशिश कर रहा हूं जो मॉडल विधि त्रुटि उत्पन्न करते समय ट्रिगर होता है।रूबी मिनीटेस्ट का उपयोग करके त्रुटि बढ़ाने के लिए मैं एक विधि कैसे लगा सकता हूं?

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 

मैं इस त्रुटि को बढ़ाने के लिए न्यूनतम न्यूनतम कैसे प्राप्त कर सकता हूं?

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 

उत्तर

10

ऐसा करने का एक तरीका मोचा का उपयोग करना है, जो रेल डिफ़ॉल्ट रूप से लोड होता है। `` `MyObject.any_instance.expects (: my_model_method)

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 
+0

अपवाद तर्क हैं, तो आप उदाहरण प्रदान करने के लिए .raises (अपवादों :: CustomError.new (some_arg))' '' – Tony

14
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 
+11

प्रो टिप: यदि आप अपवाद को बढ़ाने के लिए जिस विधि को दबा रहे हैं, उसके पास पैरामीटर हैं, तो आपको अपने लैम्ब्डा में शामिल करना होगा: raises_exception = -> (ए, बी, सी) {ArgumentError.new raise करें}। – Brad

+0

यह मेरे लिए काम करता है और आईएमओ, स्वीकार्य उत्तर होना चाहिए .. – egeland

संबंधित मुद्दे

 संबंधित मुद्दे