GraphQL এবং Apollo Server এর জন্য Jest টেস্টিং ব্যবহারের মাধ্যমে আপনি আপনার সার্ভারের কনফিগারেশন, রেজোলভার ফাংশন, এবং গ্রাফকিউএল স্কিমার বিভিন্ন অংশের কাজ সঠিকভাবে হচ্ছে কিনা তা নিশ্চিত করতে পারেন। Jest হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা JavaScript অ্যাপ্লিকেশন এবং APIs টেস্ট করতে ব্যবহার করা হয়। Apollo Server এর সঙ্গে Jest ব্যবহার করে আপনি GraphQL কুয়েরি এবং মিউটেশন টেস্ট করতে পারেন।
এখানে Jest এবং Apollo Server ব্যবহার করে GraphQL API টেস্টিং করার প্রক্রিয়া ব্যাখ্যা করা হচ্ছে।
ধাপ ১: প্রয়োজনীয় প্যাকেজ ইনস্টল করা
প্রথমে, আপনি Jest, Apollo Server, এবং graphql-tools ইন্সটল করতে হবে।
npm install --save-dev jest apollo-server graphql @graphql-tools/mock
এখানে:
- Jest: টেস্টিং ফ্রেমওয়ার্ক।
- Apollo Server: গ্রাফকিউএল সার্ভার তৈরি করার জন্য।
- graphql: গ্রাফকিউএল লাইব্রেরি।
- @graphql-tools/mock: মক ডেটা তৈরি করার জন্য ব্যবহৃত হবে, যাতে আপনি টেস্টিংয়ের সময় ডেটা মক করতে পারেন।
ধাপ ২: Apollo Server সেটআপ করা
এখন, একটি সাধারণ Apollo Server এবং GraphQL স্কিমা তৈরি করি।
// src/index.js
const { ApolloServer, gql } = require('apollo-server');
// Define your GraphQL schema
const typeDefs = gql`
type Query {
hello: String
getUser(id: ID!): User
}
type User {
id: ID
name: String
email: String
}
`;
// Sample resolver functions
const resolvers = {
Query: {
hello: () => "Hello, World!",
getUser: (_, { id }) => {
// Mock user data
return { id, name: "John Doe", email: "john@example.com" };
}
}
};
// Create Apollo Server instance
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
এখানে:
- আমরা একটি সাধারণ GraphQL স্কিমা তৈরি করেছি যা দুটি কুয়েরি, hello এবং getUser প্রদান করছে।
- getUser কুয়েরি একটি ইউজার আইডি নিয়ে ইউজারের তথ্য ফিরিয়ে দেয়।
ধাপ ৩: Apollo Server এর জন্য টেস্ট সেটআপ করা
Jest এর মাধ্যমে Apollo Server এর API টেস্ট করার জন্য আমরা apollo-server-testing প্যাকেজ ব্যবহার করব। এই প্যাকেজটি গ্রাফকিউএল কুয়েরি এবং মিউটেশন টেস্ট করতে সহায়ক।
npm install --save-dev apollo-server-testing
এখন, আপনি একটি test ফোল্ডার তৈরি করতে পারেন এবং তার মধ্যে একটি টেস্ট ফাইল তৈরি করতে পারেন।
// src/__tests__/server.test.js
const { ApolloServer, gql } = require('apollo-server');
const { createTestClient } = require('apollo-server-testing');
const { typeDefs, resolvers } = require('../index'); // Import your GraphQL schema and resolvers
// Create a new instance of ApolloServer for testing
const server = new ApolloServer({ typeDefs, resolvers });
// Use createTestClient to simulate GraphQL requests
const { query, mutate } = createTestClient(server);
describe('GraphQL API', () => {
it('fetches a hello message', async () => {
const res = await query({ query: gql`{ hello }` });
expect(res.data.hello).toBe("Hello, World!");
});
it('fetches user data by ID', async () => {
const res = await query({
query: gql`
query {
getUser(id: "1") {
id
name
email
}
}
`
});
expect(res.data.getUser.id).toBe("1");
expect(res.data.getUser.name).toBe("John Doe");
expect(res.data.getUser.email).toBe("john@example.com");
});
it('handles missing user data', async () => {
const res = await query({
query: gql`
query {
getUser(id: "999") {
id
name
email
}
}
`
});
expect(res.errors).toBeDefined();
expect(res.errors[0].message).toBe('User not found');
});
});
কোড ব্যাখ্যা:
- ApolloServer এবং TestClient:
- আমরা ApolloServer এর একটি ইনস্ট্যান্স তৈরি করেছি এবং createTestClient ব্যবহার করে গ্রাফকিউএল কুয়েরি বা মিউটেশন সিমুলেট করেছি। এটি টেস্টিং প্রক্রিয়া অনেক সহজ করে দেয়।
- Jest Test Cases:
it('fetches a hello message'): এখানে আমরা hello কুয়েরি টেস্ট করেছি।it('fetches user data by ID'): এখানে আমরা getUser কুয়েরি টেস্ট করেছি এবং একটি ইউজারের ডেটা যাচাই করেছি।it('handles missing user data'): এখানে আমরা একটি নিষ্ক্রিয় বা অনুপস্থিত ইউজার টেস্ট করেছি এবং নিশ্চিত করেছি যে এটি ত্রুটি ফেরত দেয়।
ধাপ ৪: টেস্ট চালানো
এখন, আপনার টেস্ট ফাইলগুলো রান করতে, নিচের কমান্ডটি ব্যবহার করুন:
npm test
Jest আপনার টেস্টগুলো চালাবে এবং টেস্ট কেসগুলির ফলাফল আপনাকে দেখাবে। যদি সমস্ত টেস্ট সফল হয়, তবে আপনি আপনার GraphQL API-এর কার্যকারিতা সঠিকভাবে যাচাই করতে পারবেন।
ফাইল মকিং এবং মক ডেটা (Mocking)
আপনি যদি কোনো ডেটাবেস বা বাহ্যিক API ব্যবহার না করেন, তবে @graphql-tools/mock প্যাকেজ ব্যবহার করে মক ডেটা তৈরি করতে পারেন, যা আপনাকে সরাসরি ডেটা ম্যানিপুলেশন করতে দেয়।
const { makeExecutableSchema } = require('@graphql-tools/schema');
const { mockServer } = require('@graphql-tools/mock');
// Mock server setup
const mockServer = mockServer(typeDefs);
describe('Mock Server Test', () => {
it('should return mocked user data', async () => {
const res = await mockServer.query({
query: gql`
query {
getUser(id: "1") {
id
name
email
}
}
`
});
expect(res.data.getUser.id).toBeDefined();
expect(res.data.getUser.name).toBeDefined();
expect(res.data.getUser.email).toBeDefined();
});
});
এখানে, আপনি mockServer ব্যবহার করে মক ডেটা ফেরত পাচ্ছেন যা ডেটাবেসের প্রয়োজনীয়তা ছাড়াই টেস্টিং কার্যকরী করে।
সারাংশ
Jest এবং Apollo Server ব্যবহার করে আপনি আপনার GraphQL API-র কুয়েরি, মিউটেশন এবং রেজোলভারগুলি সহজেই টেস্ট করতে পারেন। Apollo Server এবং graphql-upload প্যাকেজ ব্যবহারের মাধ্যমে আপনি ফাইল আপলোড টেস্টিংও করতে পারেন। Jest-এর সাথে mocking, error handling, এবং integration testing এর মাধ্যমে আপনার API-এর কার্যকারিতা সঠিকভাবে পরীক্ষা করা সম্ভব।
Read more