2012-09-26 3 views
17

के साथ रुपेक नियंत्रक परीक्षण यदि नियंत्रक केवल जावास्क्रिप्ट के साथ प्रतिक्रिया करता है तो आप रुपये में नियंत्रक का परीक्षण कैसे करते हैं?जावास्क्रिप्ट

कुछ view.html.erb

link_to 'More Chips', add_chips_path, :remote => true 

chips_controller

def add_chips 
    Chips.create(:color => :red) 
    @chips = Chips.all 
end 

add_chips.js.erb

$('#chip_count').html('<%=j render("chips/list", :chips => @chips) %>'); 

Rspec टेस्ट

: उदाहरण के लिए यह मेरा वास्तविक कोड होगा

spe c/नियंत्रक/chips_controller_spec

it "should add chips" do 
    post :add_chips, :format => 'js' 
end 

जब मैं इस RSpec का उपयोग कर, क्योंकि यह एक HTML अनुरोध भेज रहा है मैं एक लापता खाका त्रुटि प्राप्त करने के लिए पोस्ट करने की कोशिश लेकिन वहाँ एक HTML दृश्य नहीं है। मैंने प्रारूप में गुजरने की कोशिश की है लेकिन यह काम नहीं कर रहा है। मुझे पता है कि मैं इसे "डमी" एचटीएमएल व्यू में डाल सकता हूं ताकि यह पास हो सके लेकिन यह एक हैक जैसा लगता है।

धन्यवाद

उत्तर

15

ठीक है, मैं पता लगा मैं गलत क्या कर रहा था। मैं अपने परीक्षण के साथ एक पैरामीटर हैश पास कर रहा था और प्रारूप को उसी हैश में शामिल करने की आवश्यकता है। तो बजाय इस की:

@params = {:chip_color => 'red'} 
... 
post :add_chips, @params, :format => 'js' 

यह इस

@params = {:chip_color => 'red', :format => 'js'} 
... 
post :add_chips, @params 
43

तरह देखने के लिए आप के बजाय post :add_chips करने का, एक नियंत्रक कल्पना से एक Ajax अनुरोध करने का प्रयास कर और format एक के रूप में गुजर रहे हैं की जरूरत है पैरामीटर, आपको करना चाहिए:

xhr :post, :add_chips, @params 

... पैरामीटर में format के बिना। यह एक जावास्क्रिप्ट अनुरोध करेगा और .js टेम्पलेट के साथ जवाब देगा।

अद्यतन:

रेल/RSpec के हाल के संस्करणों में, आप के बजाय क्या करना चाहिए:

post :add_chips, params: @params, xhr: true 
+1

आकर्षण की तरह काम किया! – Surya

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