Spring Boot के साथ GraphQL APIs · पाठ

GraphQL एपीआई का एकीकरण परीक्षण

अपने पूरे GraphQL एपीआई के एकीकरण परीक्षण करें और क्वेरी, म्यूटेशन तथा सब्सक्रिप्शन को आरंभ से अंत तक जाँचें।

पाठ 2, कुल 4 में से11 चरण

GraphQL एपीआई का एकीकरण परीक्षण, CoddyKit पर Spring Boot के साथ GraphQL APIs का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Spring Boot के साथ GraphQL APIs सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot के साथ GraphQL APIs पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

GraphQL का एकीकरण टेस्ट क्यों करें?

GraphQL API की एकीकरण टेस्टिंग में आपका स्वागत है! जहाँ यूनिट टेस्ट आपके कोड के छोटे-छोटे हिस्सों की जाँच करते हैं, वहीं एकीकरण टेस्ट यह सत्यापित करते हैं कि अलग-अलग घटक सही ढंग से मिलकर काम करते हैं।

  • शुरू से अंत तक प्रवाह: ये वास्तविक क्लाइंट अनुरोधों का अनुकरण करते हैं।
  • घटकों की परस्पर क्रिया: सुनिश्चित करते हैं कि आपका GraphQL स्कीमा, रिज़ॉल्वर और डेटा स्रोत सही ढंग से जुड़े हैं।
  • विश्वास: परिनियोजन से पहले यह भरोसा दिलाते हैं कि आपका API अपेक्षा के अनुसार व्यवहार करता है।

यह पाठ Spring Boot की टेस्टिंग उपयोगिताओं के उपयोग पर केंद्रित है।

आवश्यक Spring Boot टेस्ट टूल

Spring Boot एकीकरण टेस्टिंग को सरल बनाने के लिए शक्तिशाली टूल उपलब्ध कराता है:

  • @SpringBootTest: यह एनोटेशन आपके पूरे एप्लिकेशन संदर्भ को लोड करता है, जिससे आपके सभी बीन्स टेस्टिंग के लिए उपलब्ध हो जाते हैं।
  • WebTestClient: वेब एंडपॉइंट के टेस्ट के लिए एक नॉन-ब्लॉकिंग क्लाइंट। यह आपके GraphQL API को HTTP अनुरोध भेजने का अनुकरण करता है।

इन दोनों की सहायता से आप वास्तविक GraphQL क्वेरी/म्यूटेशन भेज सकते हैं और प्रतिक्रियाओं की जाँच कर सकते हैं।

अपनी टेस्ट क्लास सेट अप करना

शुरुआत करने के लिए आप एक टेस्ट क्लास बनाएँगे। अपना एप्लिकेशन संदर्भ लोड करने के लिए उस पर @SpringBootTest एनोटेशन लगाएँ। इसके बाद, अपने GraphQL एंडपॉइंट के साथ इंटरैक्ट करने के लिए WebTestClient इंजेक्ट करें।

हम आम तौर पर टेस्टिंग के लिए WebTestClient को कॉन्फ़िगर करने हेतु @AutoConfigureWebTestClient का उपयोग करते हैं, अक्सर किसी विशिष्ट पोर्ट या संदर्भ पथ के साथ।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class GraphQLIntegrationTest {

  @Autowired
  private WebTestClient webTestClient;

  // Your test methods will go here
}

एक सरल क्वेरी टेस्ट तैयार करना

आइए एक बुनियादी GraphQL क्वेरी का टेस्ट लिखें। हम क्वेरी स्ट्रिंग परिभाषित करेंगे और फिर उसे /graphql एंडपॉइंट पर भेजने के लिए WebTestClient का उपयोग करेंगे।

क्वेरी अनुरोध के मुख्य भाग में JSON पेलोड के रूप में भेजी जाएगी, जिसमें आम तौर पर query फ़ील्ड और वैकल्पिक रूप से variables शामिल होंगे।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class SampleQueryTest {

  @Autowired
  private WebTestClient webTestClient;

  @Test
  void testHelloQuery() {
    String graphQlQuery = "{ hello }";

    webTestClient.post().uri("/graphql")
        .bodyValue(Map.of("query", graphQlQuery))
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .jsonPath("$.data.hello").isEqualTo("Hello, GraphQL!");
  }
}

चलाने योग्य: क्वेरी और परिणाम का अभिकथन

यहाँ पूरा चलाने योग्य उदाहरण दिया गया है। हमारे पास hello GraphQL क्वेरी वाला एक सरल Spring Boot ऐप है और उसके आउटपुट की पुष्टि करने वाला एकीकरण टेस्ट है।

ध्यान दें कि GraphQL प्रतिक्रिया की संरचना (data.hello) में जाने और वैल्यू का अभिकथन करने के लिए jsonPath का उपयोग किया गया है।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;

// --- Application Code ---
@SpringBootApplication
public class GraphQLApp {
  public static void main(String[] args) {
    SpringApplication.run(GraphQLApp.class, args);
  }
}

@Controller
class HelloResolver {
  @QueryMapping
  public String hello() {
    return "Hello, GraphQL!";
  }
}

// --- Test Code ---
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class HelloQueryIntegrationTest {
  @Autowired
  private WebTestClient webTestClient;

  @Test
  void testHelloQuery() {
    String graphQlQuery = "{ hello }";

    webTestClient.post().uri("/graphql")
        .bodyValue(Map.of("query", graphQlQuery))
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .jsonPath("$.data.hello").isEqualTo("Hello, GraphQL!");
  }
}

वेरिएबल के साथ क्वेरी का टेस्ट करना

कई GraphQL क्वेरी आर्ग्युमेंट लेती हैं। आप इन्हें अपने अनुरोध पेलोड में variables के रूप में भेज सकते हैं। JSON अनुरोध के मुख्य भाग में मौजूद variables फ़ील्ड, वेरिएबल नामों को उनकी वैल्यू से जोड़ने वाला मैप होना चाहिए।

GraphQL क्वेरी स्ट्रिंग में वेरिएबल परिभाषित करना न भूलें (जैसे, query MyQuery($name: String!))।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class QueryWithVarsTest {

  @Autowired
  private WebTestClient webTestClient;

  @Test
  void testGreetQueryWithName() {
    String graphQlQuery = "query Greet($name: String!) { greet(name: $name) }";
    Map<String, Object> variables = Map.of("name", "Coddy");

    webTestClient.post().uri("/graphql")
        .bodyValue(Map.of("query", graphQlQuery, "variables", variables))
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .jsonPath("$.data.greet").isEqualTo("Hello, Coddy!");
  }
}

म्यूटेशन की एकीकरण टेस्टिंग

म्यूटेशन का उपयोग डेटा बनाने, अपडेट करने या हटाने के लिए किया जाता है। इनका टेस्ट क्वेरी के समान तरीके से किया जाता है, लेकिन GraphQL स्ट्रिंग में mutation कीवर्ड का उपयोग किया जाता है।

म्यूटेशन की रिटर्न वैल्यू का अभिकथन करना और, जहाँ लागू हो, स्थिति में हुए बदलाव की पुष्टि करना अच्छा अभ्यास है (जैसे, बाद की क्वेरी चलाकर)।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class MutationIntegrationTest {

  @Autowired
  private WebTestClient webTestClient;

  @Test
  void testCreateItemMutation() {
    String graphQlMutation = "mutation CreateItem($name: String!) { createItem(name: $name) { id name } }";
    Map<String, Object> variables = Map.of("name", "New Widget");

    webTestClient.post().uri("/graphql")
        .bodyValue(Map.of("query", graphQlMutation, "variables", variables))
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .jsonPath("$.data.createItem.name").isEqualTo("New Widget");
  }
}

टेस्ट में GraphQL त्रुटियाँ सँभालना

जब आपका GraphQL API किसी त्रुटि का सामना करता है (जैसे, सत्यापन विफल होना या अनधिकृत पहुँच), तो वह आम तौर पर प्रतिक्रिया के मुख्य भाग में संभावित data फ़ील्ड के साथ errors ऐरे लौटाता है (यदि कुछ भाग सफल हुए हों)।

अपने टेस्ट में इन त्रुटि संदेशों की मौजूदगी और सामग्री जाँचने के लिए आप jsonPath का उपयोग कर सकते हैं।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class ErrorHandlingTest {

  @Autowired
  private WebTestClient webTestClient;

  @Test
  void testInvalidInputError() {
    String graphQlMutation = "mutation CreateItem($name: String!) { createItem(name: $name) { id } }";
    Map<String, Object> variables = Map.of("name", ""); // Assume empty name is invalid

    webTestClient.post().uri("/graphql")
        .bodyValue(Map.of("query", graphQlMutation, "variables", variables))
        .exchange()
        .expectStatus().isOk() // GraphQL errors usually return 200 OK
        .expectBody()
        .jsonPath("$.errors").isArray()
        .jsonPath("$.errors[0].message").isNotEmpty()
        .jsonPath("$.errors[0].message").isEqualTo("Item name cannot be empty.");
  }
}

सुरक्षित एंडपॉइंट का टेस्ट करना

यदि आपका GraphQL API Spring Security का उपयोग करता है, तो आप यह टेस्ट करना चाहेंगे कि वह प्रमाणीकृत और अप्रमाणीकृत अनुरोधों पर कैसे प्रतिक्रिया देता है। WebTestClient आपको प्राधिकरण टोकन सहित हेडर आसानी से जोड़ने देता है।

इससे सुनिश्चित होता है कि आपका सुरक्षा कॉन्फ़िगरेशन GraphQL फ़ील्ड और ऑपरेशन की सही ढंग से सुरक्षा करता है।

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
class ProtectedEndpointTest {

  @Autowired
  private WebTestClient webTestClient;

  @Test
  void testProtectedQuery_unauthorized() {
    String graphQlQuery = "{ protectedData }";

    webTestClient.post().uri("/graphql")
        .bodyValue(Map.of("query", graphQlQuery))
        .exchange()
        .expectStatus().isOk() // GraphQL often returns 200 with errors for auth issues
        .expectBody()
        .jsonPath("$.errors").isArray()
        .jsonPath("$.errors[0].message").isEqualTo("Unauthorized access");
  }

  @Test
  void testProtectedQuery_authorized() {
    String graphQlQuery = "{ protectedData }";
    String validToken = "mock-jwt-token"; // In a real app, generate a valid test token

    webTestClient.post().uri("/graphql")
        .header("Authorization", "Bearer " + validToken)
        .bodyValue(Map.of("query", graphQlQuery))
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .jsonPath("$.data.protectedData").isEqualTo("Secret Info");
  }
}

त्वरित जाँच: एकीकरण टेस्ट

निम्नलिखित ग्राफ़क्यूएल क्वेरी और उस Spring Boot अनुप्रयोग पर विचार कीजिए, जो product(id: ID!) क्वेरी उपलब्ध कराता है। कौन-सा WebTestClient अभिकथन यह सही रूप से सत्यापित करता है कि ID '123' और नाम 'Laptop' वाला उत्पाद लौटाया गया है?

पुनरावृत्ति: ग्राफ़क्यूएल एकीकरण परीक्षण

इस पाठ में आपने Spring Boot का उपयोग करके अपने ग्राफ़क्यूएल API के लिए एकीकरण परीक्षण करना सीखा।

  • हमने @SpringBootTest और WebTestClient के साथ अपना परीक्षण परिवेश तैयार करना सीखा।
  • आपने ग्राफ़क्यूएल क्वेरी और म्यूटेशन बनाकर चलाना सीखा, जिसमें चर भेजना भी शामिल है।
  • हमने jsonPath का उपयोग करके प्रत्युत्तर में अपेक्षित डेटा का अभिकथन करना देखा।
  • अंत में, आपने त्रुटि वाले प्रत्युत्तरों को संभालना और सुरक्षित एंडपॉइंट का परीक्षण करना सीखा।

आपके ग्राफ़क्यूएल API की मजबूती और शुद्धता सुनिश्चित करने के लिए एकीकरण परीक्षण अत्यंत महत्वपूर्ण हैं!

शुरुआत निःशुल्क

एआई शिक्षक के साथ Spring Boot के साथ GraphQL APIs सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “GraphQL एपीआई का एकीकरण परीक्षण” पाठ निःशुल्क है?

हाँ—“GraphQL एपीआई का एकीकरण परीक्षण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Spring Boot के साथ GraphQL APIs पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Spring Boot के साथ GraphQL APIs पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“GraphQL एपीआई का एकीकरण परीक्षण” में मैं क्या सीखूँगा?

अपने पूरे GraphQL एपीआई के एकीकरण परीक्षण करें और क्वेरी, म्यूटेशन तथा सब्सक्रिप्शन को आरंभ से अंत तक जाँचें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot के साथ GraphQL APIs का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Boot के साथ GraphQL APIs शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot के साथ GraphQL APIs शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“GraphQL एपीआई का एकीकरण परीक्षण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Boot के साथ GraphQL APIs पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Boot के साथ GraphQL APIs पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. GraphQL रिज़ॉल्वर का यूनिट परीक्षण
  2. GraphQL एपीआई का एकीकरण परीक्षण
  3. Spring Boot GraphQL का परिनियोजन
  4. GraphQL API के लिए सतत एकीकरण
← Spring Boot के साथ GraphQL APIs पर वापस जाएँ