Ruby on Rails 5.2 - ActionController::TestCase

class ActionController :: TestCase




ruby

class ActionController :: TestCase

जनक:
ActiveSupport::TestCase
शामिल मॉड्यूल:
ActionController::TestCase::Behavior

ActionController कार्यात्मक परीक्षणों के लिए ActionController । कार्यात्मक परीक्षण आपको प्रति परीक्षण विधि एक एकल नियंत्रक कार्रवाई का परीक्षण करने की अनुमति देते हैं।

कार्यात्मक शैली नियंत्रक परीक्षणों पर एकीकरण शैली नियंत्रक परीक्षणों का उपयोग करें।

रेल एकीकरण परीक्षणों के पक्ष में कार्यात्मक परीक्षणों के उपयोग को हतोत्साहित करती है ( ActionDispatch::IntegrationTest )।

नई रेल एप्लिकेशन अब कार्यात्मक शैली नियंत्रक परीक्षण उत्पन्न नहीं करती हैं और उनका उपयोग केवल पिछड़ी संगतता के लिए किया जाना चाहिए। एकीकरण शैली नियंत्रक परीक्षण वास्तविक अनुरोध करते हैं, जबकि कार्यात्मक शैली नियंत्रक परीक्षण केवल एक अनुरोध का अनुकरण करते हैं। इसके अलावा, एकीकरण परीक्षण कार्यात्मक परीक्षणों के समान तेज़ हैं और बहुत से मददगार प्रदान करते हैं जैसे as , API एंडपॉइंट सहित नियंत्रक क्रियाओं के प्रभावी परीक्षण के लिए parsed_body

मूल उदाहरण

कार्यात्मक परीक्षण निम्नानुसार लिखे गए हैं:

  1. सबसे पहले, एक HTTP अनुरोध को अनुकरण करने के लिए गेट, post , patch , put , delete या head विधि का उपयोग करता है।

  2. फिर, एक दावा करता है कि क्या वर्तमान स्थिति अपेक्षित है। "राज्य" कुछ भी हो सकता है: नियंत्रक की HTTP प्रतिक्रिया, डेटाबेस सामग्री आदि।

उदाहरण के लिए:

class BooksControllerTest < ActionController::TestCase
  def test_create
    # Simulate a POST response with the given HTTP parameters.
    post(:create, params: { book: { title: "Love Hina" }})

    # Asserts that the controller tried to redirect us to
    # the created book's URI.
    assert_response :found

    # Asserts that the controller really put the book in the database.
    assert_not_nil Book.find_by(title: "Love Hina")
  end
end

आप नकली HTTP अनुरोध में एक वास्तविक दस्तावेज़ भी भेज सकते हैं।

def test_create
  json = {book: { title: "Love Hina" }}.to_json
  post :create, body: json
end

विशेष उदाहरण चर

ActionController::TestCase भी परीक्षण में उपयोग के लिए स्वचालित रूप से निम्नलिखित उदाहरण चर प्रदान करेगा:

@controller

नियंत्रक उदाहरण जो परीक्षण किया जाएगा।

@निवेदन

एक ActionController :: TestRequest, वर्तमान HTTP अनुरोध का प्रतिनिधित्व करता है। HTTP अनुरोध भेजने से पहले आप इस ऑब्जेक्ट को संशोधित कर सकते हैं। उदाहरण के लिए, आप GET अनुरोध भेजने से पहले कुछ सत्र गुण सेट करना चाह सकते हैं।

@response

एक ActionDispatch::TestResponse ऑब्जेक्ट, अंतिम HTTP प्रतिक्रिया की प्रतिक्रिया का प्रतिनिधित्व करता है। उपरोक्त उदाहरण में, @response post कॉल करने के बाद मान्य हो जाता है। यदि विभिन्न मुखर तरीके पर्याप्त नहीं हैं, तो आप इस ऑब्जेक्ट का उपयोग HTTP प्रतिक्रिया का विस्तार से निरीक्षण करने के लिए कर सकते हैं।

(रेल के पूर्व संस्करणों के लिए प्रत्येक कार्यात्मक परीक्षण की आवश्यकता होती है उप-परीक्षण :: यूनिट :: टेस्टकैसे और setup में @controller, @request, @response।)

नियंत्रक स्वचालित रूप से अनुमानित है

ActionController::TestCase स्वचालित रूप से परीक्षण वर्ग नाम से परीक्षण के तहत नियंत्रक का अनुमान ActionController::TestCase । यदि नियंत्रक को परीक्षण वर्ग के नाम से नहीं निकाला जा सकता है, तो आप इसे स्पष्ट रूप से tests साथ सेट कर सकते हैं।

class SpecialEdgeCaseWidgetsControllerTest < ActionController::TestCase
  tests WidgetController
end

परीक्षण नियंत्रक आंतरिक

इन विशिष्ट अभिकथनों के अलावा, आपके पास विभिन्न संग्रहों तक आसान पहुँच भी है, जिनके विरुद्ध नियमित परीक्षण / इकाई अभिकथन का उपयोग किया जा सकता है। ये संग्रह हैं:

  • सत्र: वस्तुओं को सत्र में सहेजा जा रहा है।

  • फ्लैश: वर्तमान में सत्र में फ्लैश ऑब्जेक्ट।

  • कुकीज़: इस अनुरोध पर उपयोगकर्ता को कुकीज़ भेजी जा रही हैं।

इन संग्रहों का उपयोग किसी अन्य हैश की तरह ही किया जा सकता है:

assert_equal "Dave", cookies[:name] # makes sure that a cookie called :name was set as "Dave"
assert flash.empty? # makes sure that there's nothing in the flash

संग्रह के शीर्ष पर, आपके पास पूरा URL है जो किसी दिए गए कार्य को रीडायरेक्ट_to_url में उपलब्ध redirect_to_url

उसी नियंत्रक के भीतर पुनर्निर्देशित करने के लिए, आप follow_redirect को भी कॉल कर सकते हैं और पुनर्निर्देशन का पालन किया जाएगा, जिससे दूसरे कॉल को ट्रिगर किया जा सके, जिसके बाद उसके खिलाफ जोर दिया जा सके।

हेरफेर सत्र और कुकी चर

कभी-कभी आपको एक परीक्षण के लिए सत्र और कुकी चर सेट करने की आवश्यकता होती है। ऐसा करने के लिए केवल सत्र या कुकी संग्रह के लिए एक मान निर्दिष्ट करें:

session[:key] = "value"
cookies[:key] = "value"

कुकी के परीक्षण के लिए कुकी साफ़ करने के लिए कुकी संग्रह को साफ़ करें:

cookies.clear

मार्गों का परीक्षण

यदि आप नामित मार्गों का उपयोग कर रहे हैं, तो उन्हें परीक्षण मामले में मूल नाम मार्गों के तरीकों का उपयोग करके आसानी से परीक्षण किया जा सकता है।

assert_redirected_to page_url(title: 'foo')