मेरे पास कुछ नियंत्रक परीक्षण हैं जो विफल होते रहते हैं लेकिन मुझे नहीं पता कि क्यों। नियंत्रक update क्रिया:

  def update
    respond_to do |format|
      if @tag_category.update(tag_category_params)
        format.html { redirect_to company_tags_url, notice: 'Tag category was successfully updated.' }
      else
        format.html { render :edit }
      end
    end
  end

और संबंधित परीक्षण:

  test "should update tag_category" do
    patch company_tag_category_url(@tag_category), params: { ... }
    assert_redirected_to company_tags_url
  end

परीक्षण विफल रहता है (अन्य नियंत्रक में भी यही समस्या:

 FAIL["test_should_update_tag_category", #<Minitest::Reporters::Suite:0x00007f973befd100 @name="TagCategoriesControllerTest">, 62.38744100002805]
 test_should_update_tag_category#TagCategoriesControllerTest (62.39s)
        Expected response to be a <3XX: redirect>, but was a <200: OK>
        test/controllers/tag_categories_controller_test.rb:44:in `block in <class:TagCategoriesControllerTest>'

मेरी create क्रिया में ठीक वैसा ही पुनर्निर्देशन तर्क है लेकिन परीक्षण इस प्रकार है:

  test "should create tag_category" do
    assert_difference('TagCategory.count') do
      post company_tag_categories_url, params: { ... }
    end
    assert_redirected_to company_tags_url
  end

ऐसा लगता है कि मुझे यहां कुछ स्पष्ट याद आ रहा है। मैंने कोशिश की . जोर पैच रिटर्न 200 देख रहा है न कि रीडायरेक्ट जो निम्नानुसार है।

इनाम के लिए अद्यतन करें

इसे अन्य परीक्षणों में खोजना - यह ठीक काम करता है (दोनों ब्राउज़र में रीडायरेक्ट करते हैं और लॉग में रीडायरेक्ट देख सकते हैं):

नियंत्रक:

  # PATCH/PUT /wbs/1
  def update
    authorize @wbs
    if @wbs.update(wbs_params)
      redirect_to @wbs, notice: 'Work breakdown structure was successfully updated.'
    else
      render :edit
    end
  end

परीक्षण:

  test "should update work_breakdown_structure" do
    patch work_breakdown_structure_url(@work_breakdown_structure), params: { work_breakdown_structure: { description: @work_breakdown_structure.description } }
    assert_redirected_to work_breakdown_structure_url(@work_breakdown_structure)
  end

यह विफल रहता है:

नियंत्रक:

  # PATCH/PUT /wells/1
  def update
    authorize @well
    if @well.update(well_params)
      redirect_to @well, notice: 'Well was successfully updated.'
    else
      render :edit
    end
  end

परीक्षण:

  test "should update well" do
    patch well_url(@well), params: { well: { description: @well.description } }
    assert_redirected_to well_url(@well)
  end
0
Dan Tappin 30 जिंदा 2021, 08:21
यहां कुछ स्पष्ट याद आ रहा है - अन्य नियंत्रक समान नियंत्रक तर्क के साथ समान व्यवहार नहीं दिखा रहे हैं।
 – 
Dan Tappin
31 जिंदा 2021, 09:09

1 उत्तर

सबसे बढ़िया उत्तर

आपकी नियंत्रक विधि के अंदर, आपके पास एक नियंत्रण प्रवाह होता है जो जांचता है कि @tag_category इंस्टेंस सफलतापूर्वक अपडेट किया गया था या नहीं। अगर ऐसा है, तो यह company_tags_url पर रीडायरेक्ट करता है। यदि ऐसा नहीं है, तो यह :edit दृश्य प्रस्तुत करता है।

मेरा अनुमान है कि मॉडल अपडेट नहीं हो रहा है और नियंत्रक else ब्लॉक के तहत शर्त के साथ प्रतिक्रिया दे रहा है (render निष्पादित करते समय रेल 200 के साथ प्रतिक्रिया देगा)।

संपादन दृश्य प्रस्तुत करने के बजाय, उपयोगकर्ता को edit_company_tag_path(@tag_category) पर पुनर्निर्देशित करने का प्रयास करें, और यदि ऐसा है तो आपका परीक्षण विफल नहीं होगा क्योंकि यह 3XX प्रतिक्रिया की अपेक्षा कर रहा था, बल्कि इसलिए कि इसे गलत पृष्ठ पर पुनर्निर्देशित किया गया था।

2
Otávio Monteagudo 25 अप्रैल 2021, 04:13
आप 100% सही हैं - अब यह स्पष्ट है कि आप इसे इंगित करते हैं 🤦‍♂️। मैंने देखा और मुझे अपने फिक्स्चर में एक समस्या थी। पैच सत्यापन विफल कर रहा था और वास्तव में हिट कर रहा था: तर्क संपादित करें। वह हिस्सा अब स्पष्ट उपयोग नहीं था। . क्या आप परीक्षण कर सकते हैं और वापस रिपोर्ट कर सकते हैं कि सत्यापन विफल हो गया?
 – 
Dan Tappin
25 अप्रैल 2021, 04:33
मेरा अनुमान है कि 'well_params' और 'tag_category_params' जैसी परम विधियाँ होंगी, बाकी सब ठीक लगता है।
 – 
Otávio Monteagudo
26 अप्रैल 2021, 07:38