{"id":28460,"date":"2026-08-29T00:35:43","date_gmt":"2026-08-29T00:35:43","guid":{"rendered":"https:\/\/umang.pk\/2026\/08\/29\/vitest-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%a7%db%8c%da%a9%d8%b3%d9%be%d8%b1%db%8c%d8%b3-%d9%85%db%8c%da%ba-%d8%ae%d9%88%d8%af\/"},"modified":"2026-08-29T00:35:45","modified_gmt":"2026-08-29T00:35:45","slug":"vitest-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%a7%db%8c%da%a9%d8%b3%d9%be%d8%b1%db%8c%d8%b3-%d9%85%db%8c%da%ba-%d8%ae%d9%88%d8%af","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/08\/29\/vitest-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%a7%db%8c%da%a9%d8%b3%d9%be%d8%b1%db%8c%d8%b3-%d9%85%db%8c%da%ba-%d8%ae%d9%88%d8%af\/","title":{"rendered":"Vitest \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u06cc\u06ba \u062e\u0648\u062f\u06a9\u0627\u0631 \u062c\u0627\u0646\u0686 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0645\u0633\u0644\u0633\u0644 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 API \u0645\u0646\u0637\u0642 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u0648\u0686\u0646\u0627 \u0628\u0648\u062c\u06be\u0644 \u0627\u0648\u0631 \u0648\u0642\u062a \u0637\u0644\u0628 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be \u06a9\u0631 \u0648\u0642\u062a \u0627\u0648\u0631 \u062a\u0648\u0627\u0646\u0627\u0626\u06cc \u06a9\u06cc \u0628\u0686\u062a \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 IDE \u06a9\u0648 \u0686\u06be\u0648\u0691\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0648\u0626\u06cc \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc \u06a9\u06c1 \u06c1\u0631 \u062e\u0635\u0648\u0635\u06cc\u062a \u062a\u0648\u0642\u0639 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0639\u062a\u0645\u0627\u062f \u067e\u06cc\u062f\u0627 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0622\u067e \u06cc\u06c1 \u0633\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u06d2 API \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc\u0633\u06d2 \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u067e\u0648\u0633\u0679 \u0645\u06cc\u0646 \u06cc\u0627 \u062f\u0648\u0633\u0631\u06d2 API \u0679\u06cc\u0633\u0679\u0646\u06af \u0679\u0648\u0644 \u0645\u06cc\u06ba \u0646\u062a\u0627\u0626\u062c \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<ul>\n<li>\n<p><strong>Node.js \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u06cc\u06ba:<\/strong> \u0622\u067e \u06a9\u0648 Node.js \u0627\u0648\u0631 Express (\u06cc\u0627 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u062c\u06cc\u0633\u06d2: <code>fastify<\/code>)\u060c \u0628\u0634\u0645\u0648\u0644 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 API \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0627 \u06a9\u0627\u0645 \u06a9\u0627 \u0639\u0644\u0645:<\/strong> \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u06a9\u0648\u0688 \u06a9\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 TypeScript \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0644\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 TypeScript \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u0648\u06ba \u06a9\u06cc \u0679\u06be\u0648\u0633 \u0633\u0645\u062c\u06be \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>MongoDB \u06a9\u0627 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0639\u0644\u0645:<\/strong> \u06cc\u06c1 \u0645\u062f\u062f\u06af\u0627\u0631 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0636\u0631\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u062f\u06cc \u06af\u0626\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba \u0645\u0638\u0627\u06c1\u0631\u06d2 \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 MongoDB \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06cc\u0627 \u0688\u06cc\u0679\u0627 \u0644\u06cc\u0626\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0635\u0631\u0641 \u0679\u0648\u0644\u0646\u06af \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>API \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u062a\u062c\u0631\u0628\u06c1:<\/strong> \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 API \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u0622\u067e \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u062c\u0633\u0633 \u0627\u0648\u0631 \u062a\u0631\u063a\u06cc\u0628:<\/strong> APIs \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be\u0646\u06d2 \u0627\u0648\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0633\u06cc\u06a9\u06be \u06a9\u0631 \u0627\u067e\u0646\u06cc \u067e\u0633\u062f\u06cc\u062f \u06a9\u06cc \u0645\u06c1\u0627\u0631\u062a\u0648\u06ba \u06a9\u0648 \u06af\u06c1\u0631\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062e\u0648\u0627\u06c1\u0634\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0631\u062c\u06cc\u062d\u0627\u062a:<\/strong> Node.js \u0648\u0631\u0698\u0646 <strong>20 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1<\/strong> \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<p>\u0622\u067e \u0627\u0633 \u06af\u0679 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u06a9\u0648\u0688 \u06a9\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0645\u062b\u0627\u0644 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u0634\u0627\u062e \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0631 \u0622\u067e \u0645\u06a9\u0645\u0644 \u0645\u062b\u0627\u0644 \u06a9\u0627 \u0648\u0631\u0698\u0646 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0645\u0631\u06a9\u0632\u06cc \u0634\u0627\u062e \u0645\u06cc\u06ba \u062c\u0648\u0691 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u06a9\u0627\u0631\u0622\u0645\u062f \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u0627\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0630\u062e\u06cc\u0631\u06d2 \u067e\u0631 \u0633\u062a\u0627\u0631\u06c1 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-key-testing-concepts\">\u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u06a9\u0644\u06cc\u062f\u06cc \u062a\u0635\u0648\u0631\u0627\u062a<\/h2>\n<p>\u062c\u0627\u0646\u0686 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0627\u0639\u062a\u0645\u0627\u062f \u067e\u06cc\u062f\u0627 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u0627 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06cc\u0627 \u0641\u0639\u0627\u0644\u06cc\u062a \u062a\u0648\u0642\u0639 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u062f\u0648 \u0642\u0633\u0645 \u06a9\u06d2 \u0679\u06cc\u0633\u0679\u0648\u06ba \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><strong>\u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af<\/strong>: \u06cc\u06c1 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0642\u0633\u0645 \u06c1\u06d2 \u0627\u0648\u0631\u060c \u0645\u06cc\u0631\u06cc \u0631\u0627\u0626\u06d2 \u0645\u06cc\u06ba\u060c \u0633\u0628 \u0633\u06d2 \u0622\u0633\u0627\u0646\u06d4 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u06a9\u06cc\u0633\u0627 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0648\u0688 \u06a9\u06d2 \u0627\u06cc\u06a9 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686<\/strong>: \u0627\u0633 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0645\u0631\u0628\u0648\u0637 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062d\u0633\u0628 \u0645\u0646\u0634\u0627 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-key-testing-terms\">\u0679\u06cc\u0633\u0679 \u06a9\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0634\u0631\u0627\u0626\u0637<\/h3>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u060c \u06c1\u0645 \u062c\u0627\u0646\u0686 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u06a9\u0686\u06be \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062c\u0646 \u06a9\u06cc \u06c1\u0645 \u067e\u06c1\u0644\u06d2 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u0637\u0646\u0632<\/strong>: \u0645\u0648\u06a9\u0646\u06af \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u062a\u06a9\u0646\u06cc\u06a9 \u06c1\u06d2 \u062c\u0648 \u062d\u0642\u06cc\u0642\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u062c\u0639\u0644\u06cc \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u06af\u0631\u0627\u0646\u06cc<\/strong>: \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u060c \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u06cc\u0627 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0633\u06cc \u062e\u0627\u0635 \u0642\u0633\u0645 \u06a9\u06cc \u062f\u0644\u06cc\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0644\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u06cc\u0627 \u0627\u0633\u06d2 \u06a9\u062a\u0646\u06cc \u0628\u0627\u0631 \u0628\u0644\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0636\u0627\u062f<\/strong>: \u062f\u0639\u0648\u06d2 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u062c\u0648 \u0622\u0624\u0679 \u067e\u0679 \u0645\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0648\u06c1 \u0645\u062a\u0648\u0642\u0639 \u0622\u0624\u0679 \u067e\u0679 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u0628 \u062c\u0628\u06a9\u06c1 \u06c1\u0645 \u0646\u06d2 \u0627\u0633 \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631 \u0644\u06cc\u0627 \u06c1\u06d2\u060c \u0622\u0626\u06cc\u06d2 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06cc \u06a9\u0686\u06be \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u0648\u06ba \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0633\u06d2 \u0622\u0634\u0646\u0627 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-how-to-name-a-test-file\">\u0627\u067e\u0646\u06cc \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0646\u0627\u0645 \u06a9\u06cc\u0633\u06d2 \u0631\u06a9\u06be\u06cc\u06ba<\/h3>\n<p>\u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u06a9\u06d2 \u06a9\u0646\u0648\u0646\u0634\u0646 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>filename.test.ts<\/code><\/p>\n<\/li>\n<li>\n<p><code>filename.spec.ts<\/code><\/p>\n<\/li>\n<li>\n<p><code>filename.test.js<\/code><\/p>\n<\/li>\n<li>\n<p><code>filename.spec.js<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u062f\u0648\u0646\u0648\u06ba <code>spec<\/code> \u0627\u0648\u0631 <code>test<\/code> \u0622\u067e \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u0645\u06cc\u06ba \u0645\u0637\u0644\u0648\u0628\u06c1 \u0627\u0644\u0641\u0627\u0638 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0648 \u062f\u0631\u0633\u062a \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u0645\u06cc\u06ba \u0628\u06be\u06cc \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0627\u067e\u0646\u06d2 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0648 \u0632\u0628\u0627\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u060c \u0622\u067e \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u06cc\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 TypeScript \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 TypeScript (<code>.ts<\/code>) \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u0648\u0631\u0698\u0646\u06d4<\/p>\n<h3 id=\"heading-parts-of-a-testing-file\">\u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u062d\u0635\u06c1<\/h3>\n<p>\u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631\u060c \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0686\u0627\u0631 \u0627\u06c1\u0645 \u062d\u0635\u06d2 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0648\u0627\u0642\u0641 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc:<\/p>\n<ul>\n<li>\n<p><code>describe<\/code>: \u0644\u06a9\u06be\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u0648 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>it<\/code>: \u0627\u0646 \u0634\u0631\u0627\u0626\u0637 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0679\u06cc\u0633\u0679 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>expect<\/code>: \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u062a\u062d\u062a \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0645\u062a\u0648\u0642\u0639 \u0646\u062a\u06cc\u062c\u06c1 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>matchers<\/code>: \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2\u06d4 <code>expect<\/code> \u0627\u06cc\u06a9 \u06a9\u0644\u06cc\u062f\u06cc \u0644\u0641\u0638 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u062a\u062d\u062a \u0641\u0646\u06a9\u0634\u0646 \u0627\u06cc\u0633\u06cc \u0642\u062f\u0631 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0645\u062a\u0648\u0642\u0639 \u0688\u06cc\u0679\u0627 \u06cc\u0627 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u06cc \u0645\u062b\u0627\u0644:<\/p>\n<pre><code class=\"language-typescript\">import { describe, it, expect } from \"vitest\";\nimport validateEmail from \"..\/utils\/email-validation\";\n\ndescribe(\"email validation test suites\", () => {\n  it(\"must define email validation function\", () => {\n    expect(validateEmail).toBeDefined();\n  });\n});\n<\/code><\/pre>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u0627 \u0679\u06a9\u0691\u0627 \u06c1\u06d2\u06d4 <code>validateEmail<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u06c1\u0645 \u06c1\u06cc\u06ba <code>describe<\/code> \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>describe<\/code> \u06cc\u06c1 \u0645\u062e\u062a\u0644\u0641 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0633\u0632 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u0627\u0648\u0631 \u0627\u0641\u0639\u0627\u0644 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <code>it<\/code> \u0645\u0637\u0644\u0648\u0628\u06c1 \u0627\u0644\u0641\u0627\u0638 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u062a\u062d\u062a \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0627\u0648\u0631 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>it<\/code> \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u062f\u0639\u0648\u06d2 \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0645\u062e\u0635\u0648\u0635 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0627\u0648\u0631 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u06cc\u06a9 \u062a\u0627\u0631 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u06be\u0631 <code>expect<\/code> \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0686\u06be \u0634\u0631\u0627\u0626\u0637 \u0645\u0645\u0627\u062b\u0644 \u06c1\u06cc\u06ba \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0627\u0642\u0633\u0627\u0645 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>toBeDefined<\/code> \u0645\u0644\u0627\u067e \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-list-of-matchers\">\u0645\u06cc\u0686\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a:<\/h3>\n<p>\u0628\u06c1\u062a \u0633\u06d2 \u0645\u06cc\u0686\u0631\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0686\u0646\u062f \u06cc\u06c1 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>toBe<\/code>: \u067e\u0627\u0633 \u0634\u062f\u06c1 \u0642\u062f\u0631 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u06d2\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0627\u0642\u0633\u0627\u0645 \u062c\u06cc\u0633\u06d2 \u062a\u0627\u0631\u060c \u0646\u0645\u0628\u0631 \u0648\u063a\u06cc\u0631\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toEqual<\/code>: \u067e\u0627\u0633 \u0634\u062f\u06c1 \u0642\u062f\u0631 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u06d2\u06d4 \u063a\u06cc\u0631 \u0642\u062f\u06cc\u0645 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0627\u0642\u0633\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0627\u0634\u06cc\u0627\u0621\u060c \u0635\u0641\u0648\u06ba \u0648\u063a\u06cc\u0631\u06c1\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toThrow<\/code>: \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u06cc\u06c1 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062e\u0627\u0645\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u06cc \u06a9\u06c1 \u0622\u06cc\u0627 \u0641\u0646\u06a9\u0634\u0646 \u0646\u06d2 \u0645\u062a\u0648\u0642\u0639 \u0627\u06cc\u0631\u0631 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06cc\u0627 \u0645\u062b\u0627\u0644 \u06a9\u0648 \u0627\u0679\u06be\u0627\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toBeCalledWith<\/code>: \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0644\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toBecalledOnce<\/code>: \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toBeDefined<\/code>: \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toBeUndefined<\/code>: \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0648\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u063a\u06cc\u0631 \u0645\u062a\u0639\u06cc\u0646\u06c1 \u0642\u062f\u0631 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toBeTruthy<\/code>: \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0648\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0628\u0648\u0644\u06cc\u0646 \u0648\u06cc\u0644\u06cc\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>toBeFalsy<\/code>: \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0648\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u063a\u0644\u0637 \u0628\u0648\u0644\u06cc\u0646 \u0648\u06cc\u0644\u06cc\u0648 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0648\u06c1\u0627\u06ba \u06a9\u06d2 \u0628\u06c1\u062a \u0633\u06d2 \u0645\u06cc\u0686\u0631\u0632 \u0645\u06cc\u06ba \u0633\u06d2 \u0635\u0631\u0641 \u0686\u0646\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-vitest-installation\">\u063a\u06cc\u0631 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628<\/h3>\n<p>\u0627\u0628 \u062c\u0628 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u062c\u0627\u0646\u0686 \u06a9\u06cc \u06a9\u0686\u06be \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u06cc\u06ba \u0645\u0639\u0644\u0648\u0645 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u062d\u0642\u06cc\u0642\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u0626\u06cc\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>vitest<\/code>\u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9\u06d4<\/p>\n<p>\u0622\u067e \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>vitest<\/code> \u0646\u06cc\u0686\u06d2 \u062f\u06cc \u06af\u0626\u06cc \u0641\u06c1\u0631\u0633\u062a \u0633\u06d2:<\/p>\n<pre><code class=\"language-shell\">pnpm add -D vitest # for pnpm package manager\nnpm install -D vitest # for npm package manager\nyarn add -D vitest # for yarn package manager\nbun add -D vitest # for bun package manager\n<\/code><\/pre>\n<h2 id=\"heading-unit-testing\">\u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af<\/h2>\n<p>\u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0688 \u06a9\u06d2 \u0686\u06be\u0648\u0679\u06d2\u060c \u0627\u0644\u06af \u062a\u06be\u0644\u06af \u0679\u06a9\u0691\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0645\u062b\u0627\u0644 \u06cc\u06c1 \u06c1\u0648 \u06af\u06cc \u06a9\u06c1 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0631\u0627\u0628\u0637\u06d2 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a \u06c1\u06d2\u06d4 \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0631\u0627\u0628\u0637\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06a9\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u0633 \u0628\u0627\u062a \u0633\u06d2 \u0648\u0627\u0642\u0641 \u06c1\u0648 \u0633\u06a9\u06cc\u06ba \u06a9\u06c1 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0644\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">export default function validateEmail(email: string) {\n  const regex = \/^[^s@]+@[^s@]+.[^s@]+$\/;\n\n  if (regex.test(email)) {\n    return true;\n  } else {\n    throw new Error(\"Invalid email format\");\n  }\n}\n<\/code><\/pre>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u0627 \u0679\u06a9\u0691\u0627 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062e\u0627\u0631\u062c \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc \u0645\u06cc\u0644 \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u062f\u0631\u0633\u062a \u06c1\u06d2 \u0627\u06cc\u06a9 \u0631\u06cc\u06af\u0648\u0644\u0631 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0634\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0627\u06cc \u0645\u06cc\u0644 \u063a\u0644\u0637 \u06c1\u06d2 \u062a\u0648\u060c \u0627\u06cc\u06a9 \u062e\u0631\u0627\u0628\u06cc \u0648\u0627\u0642\u0639 \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-tests-for-the-validateemail-function\">\u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679: <code>validateEmail<\/code> \u0641\u0646\u06a9\u0634\u0646<\/h3>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1: <code>validateEmail<\/code> \u062f\u0631\u0633\u062a \u0627\u06cc \u0645\u06cc\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u062d\u06cc\u062d \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { describe, it, expect } from \"vitest\";\nimport validateEmail from \"..\/utils\/email-validation\";\n\ndescribe(\"email validation test suites\", () => {\n\n  it(\"returns true for valid email\", () => {\n    const sampleEmail = \"arnoldjabo@gmail.com\";\n    expect(validateEmail(sampleEmail)).toBeTruthy();\n  });\n\n});\n<\/code><\/pre>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u0679\u06cc\u0633\u0679 \u0627\u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>sampleEmail<\/code> \u0627\u0633\u06d2 \u0628\u0637\u0648\u0631 \u0646\u0645\u0648\u0646\u06c1 \u0627\u06cc \u0645\u06cc\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>validateEmail<\/code> \u0641\u0646\u06a9\u0634\u0646 \u0627\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>npx vitest<\/code> \u0622\u067e \u06a9\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 \u062c\u0648 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0646\u06cc\u0686\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u06cc \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 Vitest \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0686\u0644\u0627\u0626\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0679\u06cc\u0633\u0679\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u0627\u0648\u0631 \u067e\u0627\u0633 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u0646\u0627\u06a9\u0627\u0645 \u0679\u06cc\u0633\u0679\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u063a\u0644\u0637 \u0627\u06cc \u0645\u06cc\u0644\u0632 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0679\u06cc\u0633\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { describe, it, expect } from \"vitest\";\nimport validateEmail from \"..\/utils\/email-validation\";\n\ndescribe(\"email validation test suites\", () => {\n\n    it(\"throws error for invalid email\", () => {\n    const sampleEmail = \"verymasd.com\";\n    const invalidEmailResults = () => validateEmail(sampleEmail);\n    expect(invalidEmailResults).toThrow(\"Invalid email format\");\n  });\n\n});\n<\/code><\/pre>\n<p>\u0627\u06cc\u0633\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0648 \u063a\u0644\u0637\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0644\u067e\u06cc\u0679\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062a\u0627\u06a9\u06c1 \u0679\u06cc\u0633\u0679 \u06a9\u0648 \u062f\u0639\u0648\u06cc\u0670 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0631\u06a9\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4 <code>expect<\/code> \u067e\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u0646\u0648\u06a9\u0631\u06cc.<\/p>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u06cc \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba <code>validateEmail<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0644\u067e\u06cc\u0679 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u062c\u0648 \u0628\u06be\u06cc \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba \u06c1\u0648\u06ba \u06af\u06cc \u0627\u0633\u06d2 \u0631\u0648\u06a9\u06d2 \u06af\u0627\u06d4 <code>validateEmail<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u067e\u06be\u06cc\u0646\u06a9 \u06c1\u06d2. \u067e\u06be\u0631 \u06cc\u06c1 <code>invalidEmailResults<\/code> \u0645\u062a\u063a\u06cc\u0631 \u0627\u06af\u0644\u0627 \u06c1\u0645 <code>toThrow<\/code> \u0645\u0645\u0627\u062b\u0644 \u0634\u062e\u0635 <code>expect<\/code> \u062f\u0639\u0648\u06cc \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u0642\u0633\u0645 <code>validateEmail<\/code> \u0627\u06cc\u06a9 \u062e\u0631\u0627\u0628 \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u067e\u06be\u06cc\u0646\u06a9\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u06c1\u0645 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0628 \u06c1\u0645 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0679\u06cc\u0633\u0679 \u067e\u0627\u0633 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1787963743_986_Vitest-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633-\u0645\u06cc\u06ba-\u062e\u0648\u062f\u06a9\u0627\u0631-\u062c\u0627\u0646\u0686-\u06a9\u06cc\u0633\u06d2.png\" alt=\"\u063a\u0644\u0637 \u0627\u06cc \u0645\u06cc\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u067e\u0627\u0633 \u06a9\u06cc\u0627\u060c \u062c\u0633 \u0633\u06d2 \u063a\u0644\u0637 \u0627\u06cc \u0645\u06cc\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u063a\u0644\u0637\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06af\u0631 \u0627\u0633\u06d2 \u067e\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>validateEmail<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u062e\u0631\u0627\u0628\u06cc \u0648\u0627\u0642\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2 \u067e\u0631 \u06a9\u0686\u06be \u0627\u06cc\u0633\u0627 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1787963743_461_Vitest-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633-\u0645\u06cc\u06ba-\u062e\u0648\u062f\u06a9\u0627\u0631-\u062c\u0627\u0646\u0686-\u06a9\u06cc\u0633\u06d2.png\" alt=\"\u06cc\u06c1 \u0648\u06c1 \u0627\u06cc\u0631\u0631 \u0645\u06cc\u0633\u062c \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0679\u06cc\u0633\u0679 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u06af\u0627 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0644\u067e\u06cc\u0679\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u063a\u0644\u0637\u06cc \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u063a\u0644\u0637\u06cc \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u062d\u062a\u0645\u06cc \u062f\u0639\u0648\u06d2 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0644\u06c1\u0630\u0627\u060c \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u0633\u0627 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u0631\u0631 \u067e\u06be\u06cc\u0646\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0644\u067e\u06cc\u0679\u0646\u0627 \u0646\u06c1 \u0628\u06be\u0648\u0644\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u06cc\u0631\u0631 \u067e\u06be\u06cc\u0646\u06a9\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<p><strong>\u0679\u067e<\/strong>: \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be\u062a\u06d2 \u0648\u0642\u062a\u060c \u0645\u062a\u0648\u0642\u0639 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0646 \u067e\u0679 \u0627\u0648\u0631 \u0622\u0624\u0679 \u067e\u0679\u0633 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u062f\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0641\u06a9\u0631 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 \u0633\u0648\u0686\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0646 \u067e\u0679 \u0627\u0648\u0631 \u0622\u0624\u0679 \u067e\u0679 \u06cc\u06c1\u0627\u06ba \u06a9\u0644\u06cc\u062f\u06cc \u0639\u0646\u0627\u0635\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-testing-api-calls\">API \u06a9\u0627\u0644 \u0679\u06cc\u0633\u0679\u0646\u06af<\/h3>\n<p>\u0627\u0628 \u0622\u067e \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0628 \u0622\u0626\u06cc\u06d2 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 API \u06a9\u0648 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u06d4<\/p>\n<pre><code class=\"language-typescript\">import Contacts from \"..\/..\/schema\/contactList\";\nimport { Request, Response } from \"express\";\nimport validateEmail from \"..\/..\/utils\/email-validation\";\n\nasync function addContacts(req: Request, res: Response) {\n  const { contactName, phoneNumber, email } = req.body;\n  validateEmail(email);\n\n  const contact = await Contacts.create({ contactName, phoneNumber, email });\n\n  return res.status(201).json({ message: `successfully created ${contact.contactName}` });\n}\n\nexport default addContacts;\n<\/code><\/pre>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u0648\u0688 \u06a9\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u0627\u0628\u0637\u06c1 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u06be\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06af\u06d2 \u0628\u06be\u06cc\u062c\u06cc \u06af\u0626\u06cc \u0627\u06cc \u0645\u06cc\u0644 \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u062b\u0627\u0644 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u06af\u0648 \u0688\u06cc \u0628\u06cc \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u06a9\u0648 \u0645\u0646\u06af\u0648 \u0688\u06cc \u0628\u06cc \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0631\u0628\u0648\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0646\u06af\u0648\u0632\u06d4<\/p>\n<p>\u063a\u06cc\u0631 \u062e\u0627\u0644\u0635 \u0641\u0646\u06a9\u0634\u0646\u0632 (\u06cc\u0639\u0646\u06cc \u0648\u06c1 \u0641\u0646\u06a9\u0634\u0646\u0632 \u062c\u0648 \u0628\u06cc\u0631\u0648\u0646\u06cc \u062e\u062f\u0645\u0627\u062a \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 API \u06a9\u0627\u0644\u0632 \u06cc\u0627 \u062f\u06cc\u06af\u0631 \u0641\u0646\u06a9\u0634\u0646\u0632 \u067e\u0631 \u06a9\u0627\u0644\u0632) \u06a9\u06d2 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679\u0633 \u06a9\u0648 \u0642\u062f\u0631\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0627\u0646\u0686\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646 \u0635\u0648\u0631\u062a\u0648\u06ba \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u0635\u0644 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u06cc\u06a9 \u0641\u0631\u0636\u06cc \u06cc\u0627 \u062c\u0639\u0644\u06cc \u0648\u0631\u0698\u0646 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u06cc\u06a9\u0633\u0679\u0631\u0646\u0644 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633 \u06a9\u06d2 \u0631\u0648\u06cc\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648 \u062c\u0633 \u06a9\u06cc \u0622\u067e \u062a\u0648\u0642\u0639 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u06af\u0631 \u0622\u067e \u062d\u0642\u06cc\u0642\u06cc \u0648\u0631\u0698\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u06d2 \u0622\u067e \u06a9\u06cc \u0633\u0645\u062c\u06be \u06a9\u0648 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc \u06a9\u06c1 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679\u0648\u06ba \u0627\u0648\u0631 \u0679\u06cc\u0633\u0679\u0648\u06ba \u0645\u06cc\u06ba \u0645\u0648\u06a9\u0633 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u06cc\u0645\u0648<\/strong>: \u0637\u0646\u0632 \u06a9\u0631\u0646\u0627 <code>validateEmail<\/code> \u0641\u0639\u0627\u0644\u06cc\u062a \u06cc\u06c1\u0627\u06ba \u0627\u062a\u0646\u06cc \u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u062e\u0648\u062f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0631\u0642 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u0626\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0627\u06a9 \u0627\u067e \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0645\u0627\u0688\u06cc\u0648\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u062a\u06d2 \u0648\u0642\u062a \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u06c1\u06d2\u06d4 <code>vi.mock<\/code> \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u062c\u0648 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06cc \u062f\u0631\u0622\u0645\u062f\u0627\u062a \u06a9\u0648 \u0627\u0635\u0644 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06d2 \u0688\u0645\u06cc \u06cc\u0627 \u062c\u0639\u0644\u06cc \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">vi.mock(filepath,callback);\n<\/code><\/pre>\n<p><code>vi.mock<\/code>    \u06cc\u06c1 \u062f\u0648 \u062f\u0644\u0627\u0626\u0644 \u0644\u06cc\u062a\u0627 \u06c1\u06d2: \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06cc \u0641\u0627\u0626\u0644 \u067e\u0627\u062a\u06be \u0644\u0648\u06a9\u06cc\u0634\u0646 \u062c\u0633 \u06a9\u0627 \u0622\u067e \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u062c\u0633\u06d2 \u0641\u06cc\u06a9\u0679\u0631\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06cc \u062f\u0631\u0622\u0645\u062f \u06a9\u0648 \u0627\u06cc\u06a9 \u0641\u0631\u0636\u06cc \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0645\u0630\u0627\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>validateEmail<\/code> \u0627\u06cc\u06a9 \u0641\u06cc\u06a9\u0679\u0631\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0627\u06cc\u06a9 \u0631\u0627\u0633\u062a\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0648\u06a9 \u0627\u067e \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">vi.mock(\"..\/utils\/email-validation\", () => {\n  return { default: vi.fn()};\n});\nimport validateEmail from \"..\/utils\/email-validation\";\n<\/code><\/pre>\n<p>\u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 (\u0641\u06cc\u06a9\u0679\u0631\u06cc \u0641\u0646\u06a9\u0634\u0646) \u0645\u06cc\u06ba\u060c \u0628\u0631\u0622\u0645\u062f \u0634\u062f\u06c1 \u0645\u0627\u0688\u06cc\u0648\u0644 \u0633\u06d2 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u0627\u067e\u0633 \u06a9\u0631\u06cc\u06ba: <strong>\u0628\u0646\u06cc\u0627\u062f\u06cc<\/strong> \u0627\u0648\u0631 \u0642\u062f\u0631 <code>vi.fn<\/code>. \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>vi.fn()<\/code> \u06cc\u06c1 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0631\u06cc\u0679\u0631\u0646 \u0648\u06cc\u0644\u06cc\u0648 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2: <code>undefined<\/code>.<\/p>\n<p>\u06c1\u0645 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>validateEmail<\/code> \u0627\u0641\u0639\u0627\u0644 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0628\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0631\u0622\u0645\u062f \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0646\u0627\u0645\u0632\u062f \u0628\u0631\u0622\u0645\u062f \u062a\u06be\u0627\u060c \u062a\u0648 \u0648\u0627\u067e\u0633\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0688\u06cc\u0641\u0627\u0644\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0635\u0644 \u0628\u0631\u0622\u0645\u062f \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627\u06d4<\/p>\n<pre><code class=\"language-typescript\">vi.mock(\"..\/utils\/email-validation\", () => {\n  return { validateEmail: vi.fn() };\n});\nimport { validateEmail } from \"..\/utils\/email-validation\";\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0635\u0644\u06cc \u0645\u0627\u0688\u06cc\u0648\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06c1\u0645\u06cc\u0634\u06c1 \u0641\u0631\u0636\u06cc \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0645\u0627\u0688\u06cc\u0648\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2 <code>vi.fn()<\/code> \u06cc\u06c1 \u0641\u0631\u0636\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u0627\u0648\u0631 \u0637\u0631\u0632 \u0639\u0645\u0644 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0686\u06be \u06cc\u06c1 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>mockReturnValue<\/code>: \u0627\u06cc\u06a9 \u0641\u0631\u0636\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u062f\u0631 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>mockRejectsValue<\/code>: \u0648\u0639\u062f\u06c1 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0648\u0627\u067e\u0633 \u0622\u0626\u06d2 \u06af\u0627 \u063a\u0644\u0637\u06cc \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>mockResolveValue<\/code>: \u0648\u0639\u062f\u06c1 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0646 \u0633\u0627 \u0688\u06cc\u0679\u0627 \u0648\u0627\u067e\u0633 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><code>mockImplementation<\/code>: \u0641\u0631\u0636\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0646\u0626\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0631\u0648\u06cc\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>mockReturnThis<\/code>: \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u0635\u0644 \u0645\u062b\u0627\u0644 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0648\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0648\u0642\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0641\u0631\u0636\u06cc \u0646\u0641\u0627\u0630 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0641\u0631\u0636\u06cc \u06a9\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u0627\u062f \u0631\u06c1\u06d2 \u06a9\u06c1 \u0627\u0648\u0631 \u0628\u06be\u06cc \u0628\u06c1\u062a \u0633\u06cc \u0686\u06cc\u0632\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba <code>emailValidate<\/code>\u06c1\u0645 \u06c1\u06cc\u06ba <code>mockReturnValue<\/code> \u0627\u0648\u0631 <code>mockImplementation<\/code> \u0637\u0631\u06cc\u0642\u06d2<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>mockReturnValue<\/code> verifyEmail \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u062f\u0631\u0633\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1 \u0641\u0631\u0636 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u06c1 \u0627\u06cc \u0645\u06cc\u0644 \u0641\u0627\u0631\u0645\u06cc\u0679 \u062f\u0631\u0633\u062a \u06c1\u06d2\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">vi.mock(\"..\/utils\/email-validation\", () => {\n  return { default: vi.fn().mockReturnValue(true) };\n});\nimport validateEmail from \"..\/utils\/email-validation\";\n<\/code><\/pre>\n<p>\u06c1\u0645 \u0641\u0631\u0636\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0627\u0633 \u0637\u0631\u062d \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>vi.fn<\/code> \u067e\u06be\u0631 \u0632\u0646\u062c\u06cc\u0631 \u062c\u0648\u0691\u06cc\u06ba\u06d4 <code>mockReturnValue(true)<\/code> \u06c1\u0645\u0627\u0631\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba \u06c1\u0645 \u0645\u0648\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0631\u06cc\u0679\u0631\u0646 \u0648\u06cc\u0644\u06cc\u0648 (\u063a\u06cc\u0631 \u0645\u062a\u0639\u06cc\u0646\u06c1) \u06a9\u0648 \u0633\u0686 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-defining-the-mocking-implementation\">\u0641\u0631\u0636\u06cc \u0646\u0641\u0627\u0630 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641<\/h3>\n<p>\u0622\u067e \u0641\u0631\u0636\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u06c1\u062a \u0633\u06cc \u0686\u06cc\u0632\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0641\u0631\u0636\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u0627 \u062c\u0648 \u0627\u0635\u0644 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u06cc \u062c\u06af\u06c1 \u0644\u06d2 \u0644\u06d2\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u0639\u0644\u06cc \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0679\u06cc\u0633\u0679 \u0633\u0648\u06cc\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0631\u0627\u0628\u0637\u06c1 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u063a\u0644\u0637 \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u067e\u0631 \u063a\u0644\u0637\u06cc \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { describe, expect, it, vi } from \"vitest\";\nimport mockinggoose from \"mockingoose\";\nimport Contacts from \"..\/schema\/contactList\";\nimport addContacts from \"..\/src\/controllers\/add-contacts.controller\";\n\nimport { type Response, type Request } from \"express\";\n\nvi.mock(\"..\/utils\/email-validation\", () => {\n  return { default: vi.fn().mockReturnValue(true) };\n});\n\nimport validateEmail from \"..\/utils\/email-validation\";\n\nconst fakeContact = {\n  contactName: \"arnold\",\n  phoneNumber: 798600102,\n  email: \"arnoldjabo@gmail.com\",\n};\n\ndescribe(\"Add contacts to the database\", async () => {\n  it(\"throws error for the wrong email address\", async () => {\n    const req = {\n      body: { ...fakeContact, email: \"fakemail\" },\n    } as Request;  \n\n    const res = {\n      status: vi.fn().mockReturnThis(),\n      json: vi.fn(),\n    } as any as Response;\n\n    (validateEmail as ReturnType<typeof vi.fn=\"\">).mockImplementation(() => {\n      throw new Error(\"invalid email!\");\n    });\n \n    await expect(addContacts(req, res)).rejects.toThrow();\n  });\n});\n<\/typeof><\/code><\/pre>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u0679\u06a9\u0691\u0627 \u0627\u06cc\u06a9 \u062c\u0639\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0642\u0633\u0645 \u067e\u0631 \u0688\u0627\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>express<\/code>. \u062c\u0648\u0627\u0628\u06cc \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u06be\u06cc \u0627\u06cc\u0633\u0627 \u06c1\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0627\u06c1\u0645\u060c \u06cc\u06c1\u0627\u06ba \u0641\u0631\u0642 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0631\u062f\u0639\u0645\u0644 (\u0631\u06cc\u0627\u0633\u062a \u0627\u0648\u0631 \u0631\u062f\u0639\u0645\u0644) \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0639\u0627\u0645 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06be\u06cc \u0645\u0630\u0627\u0642 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>json<\/code> \u0627\u0639\u062a\u0631\u0627\u0636)\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba: <code>validateEmail<\/code> TypeScript \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0648\u0627\u0626\u0679\u0633\u0679 \u0645\u0648\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0642\u0633\u0645 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u06c1\u0645 <code>mockImplementation<\/code> \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u063a\u0644\u0637\u06cc \u06a9\u0648 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0633\u06d2 \u067e\u06be\u06cc\u0646\u06a9\u0646\u0627 \u06c1\u06d2\u06d4 <code>validateEmail<\/code>.<\/p>\n<p>\u0627\u0628 \u062c\u0628 \u06a9\u06c1 \u0648\u0639\u062f\u06d2 \u067e\u0631 \u0645\u0628\u0646\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062f\u0639\u0648\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0645 \u06c1\u06cc\u06ba <code>rejects<\/code> \u0622\u067e \u0627\u06cc\u06a9 \u062f\u0639\u0648\u06cc\u0670 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0645\u06cc\u0686\u0631 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0633 \u0642\u0633\u0645 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>\u0679\u067e:<\/strong> TypeScript \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u060c \u0622\u067e \u0631\u0633\u067e\u0627\u0646\u0633 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u06a9\u0627\u0633\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0627 \u062a\u06be\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0631\u0633\u067e\u0627\u0646\u0633 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0633\u062e\u062a \u06c1\u06d2\u06d4 \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u067e\u0631 \u06a9\u0627\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u062c\u0648\u0627\u0628\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 \u067e\u0631 \u0648\u0627\u067e\u0633 \u06a9\u0627\u0633\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 TypeScript \u0648\u0627\u0631\u0646\u0646\u06af\u0632 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-mocking-a-mongoose-model\">\u0645\u0646\u06af\u0648\u0632 \u0645\u0627\u0688\u0644 \u0645\u0648\u06a9<\/h3>\n<p>\u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u062d\u0642\u06cc\u0642\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06c1\u0645 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u06a9\u0627 \u0646\u0641\u0627\u0630 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06c1\u0645\u0627\u0631\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba <code>create<\/code> \u0645\u0646\u06af\u0648\u0632 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u06d4 \u0645\u0646\u06af\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0631\u06cc\u06a9\u0627\u0631\u0688\u0632 \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u067e \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u067e\u0631 \u06a9\u06cc\u0627 \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 (\u06cc\u06c1 \u0648\u06c1\u06cc \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0648 \u0622\u067e \u0648\u0627\u067e\u0633 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u06af\u0631 \u0622\u067e \u062d\u0642\u06cc\u0642\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba)\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0645\u0646\u06af\u0648\u0632 \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>mockingoose<\/code>:<\/p>\n<pre><code class=\"language-shell\">pnpm add -D mockingoose # for pnpm package manager\nnpm install -D mockingoose # for npm package manager\nyarn add -D mockingoose # for yarn package manager\nbun add -D mockingoose # for bun package manager\n<\/code><\/pre>\n<p>\u062a\u0646\u0635\u06cc\u0628 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u067e\u0646\u06d2 \u0631\u0627\u0628\u0637\u06c1 \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0648\u06a9 \u0627\u067e \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { describe, expect, it, vi } from \"vitest\";\nimport mockinggoose from \"mockingoose\";\nimport Contacts from \"..\/schema\/contactList\";\n\nconst fakeContact = {\n  contactName: \"arnold\",\n  phoneNumber: 798600102,\n  email: \"arnoldjabo@gmail.com\",\n};\n\ndescribe(\"Add contacts to the database\", async () => {\n  it(\"successfully create a new contact to the database\", async () => {\n    mockinggoose(Contacts).toReturn(fakeContact, \"save\");\n  });\n\n});\n<\/code><\/pre>\n<p>\u0645\u0646\u06af\u0648\u0632 \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba: <code>mockinggoose()<\/code> \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0631 \u06c1\u0645 <code>toReturn<\/code> \u0627\u06cc\u06a9 \u0645\u06cc\u0686\u0631 \u062c\u0648 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u061b <code>toReturn<\/code> \u0645\u06cc\u0686\u0631 \u06a9\u0648 \u062f\u0648 \u062f\u0644\u0627\u0626\u0644 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062f\u0644\u0627\u0626\u0644 \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u0639\u0644\u06cc \u0688\u06cc\u0679\u0627\u0633\u06cc\u0679 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Mongo \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: <code>save<\/code> \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06c1\u0645 \u06a9\u0627\u063a\u0630 \u067e\u0631 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-unit-testing-the-api\">API \u06cc\u0648\u0646\u0679 \u06a9\u06cc \u062c\u0627\u0646\u0686<\/h3>\n<p>\u0622\u067e \u0627\u06cc\u0688 \u06a9\u0646\u0679\u06cc\u06a9\u0679 API \u06a9\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u0627 \u067e\u06c1\u0644\u0627 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be \u06a9\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0637\u0631\u062d:<\/p>\n<pre><code class=\"language-typescript\">import { describe, expect, it, vi } from \"vitest\";\nimport mockinggoose from \"mockingoose\";\nimport Contacts from \"..\/schema\/contactList\";\nimport addContacts from \"..\/src\/controllers\/add-contacts.controller\";\nimport { type Response, type Request } from \"express\";\n\nvi.mock(\"..\/utils\/email-validation\", () => {\n  return { default: vi.fn().mockReturnValue(true) };\n});\n\nimport validateEmail from \"..\/utils\/email-validation\";\n\nconst fakeContact = {\n  contactName: \"arnold\",\n  phoneNumber: 798600102,\n  email: \"arnoldjabo@gmail.com\",\n};\n\ndescribe(\"Add contacts to the database\", async () => {\n  it(\"successfully create a new contact to the database\", async () => {\n    mockinggoose(Contacts).toReturn(fakeContact, \"save\");\n\n    const req = {\n      body: fakeContact,\n    } as Request;\n\n    const res = {\n      status: vi.fn().mockReturnThis(),\n      json: vi.fn(),\n    } as any as Response;\n\n    await addContacts(req, res);\n    expect(res.status).toHaveBeenCalledWith(201);\n    expect(res.json).toHaveBeenCalledWith({\n      message: `successfully created ${fakeContact.contactName}`,\n    });\n  });\n });\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0679\u06cc\u0633\u0679 \u062f\u0639\u0648\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u06cc\u0686\u0631\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <strong>\u062c\u0627\u0633\u0648\u0633<\/strong>. \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u062a\u0646\u06cc \u0628\u0627\u0631 \u0628\u0644\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u06cc\u0627 \u0627\u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0646 \u0633\u06d2 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u06c1\u0645 \u062a\u0648\u0642\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u062c\u0648\u0627\u0628 \u06a9\u06d2 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u062f\u0644\u06cc\u0644 201 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f JSON \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u062c\u0648\u0627\u0628 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06cc \u062f\u0644\u06cc\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-integration-tests\">\u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686<\/h2>\n<p>\u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u0633\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u0645\u0648\u0627\u0635\u0644\u0627\u062a \u0627\u0648\u0631 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0646 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0645\u0631\u0628\u0648\u0637 \u06c1\u06d2 \u062c\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0631 API \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633 (\u062c\u06c1\u0627\u06ba \u0622\u067e \u06a9\u0648 API \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2)\u060c \u0627\u0646\u0636\u0645\u0627\u0645 \u0679\u06cc\u0633\u0679 \u06cc\u06c1 \u062c\u0627\u0646\u0686\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u06a9\u0686\u06be \u062d\u0635\u06d2 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0631\u0628\u0648\u0637 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0648\u0642\u0639 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0648 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u062c\u0691 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-creating-integration-test-data-storage\">\u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p>\u0679\u06cc\u0633\u0679 \u0645\u0627\u062d\u0648\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u062f\u0648 \u0637\u0631\u06cc\u0642\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u062a\u06d2 \u0648\u0642\u062a \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0627\u067e\u0646\u06d2 \u0627\u0635\u0644\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u06cc\u06a9 \u0631\u06cc\u067e\u0644\u06cc\u06a9\u0627 \u0633\u06a9\u06cc\u0645\u0627 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0648 \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0628 \u0628\u06be\u06cc \u0622\u067e \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0679\u06cc\u0633\u0679 DB \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u0627\u0633\u06a9\u06cc\u0645\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0633\u06cc \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0641\u0627\u0631\u0645 \u06a9\u0648 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u06a9\u0646\u0641\u06cc\u06af\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0679\u06cc\u0633\u0679\u0646\u06af \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u067e\u06c1\u0644\u0627 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u0627\u0648\u0631 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u062f\u0648\u0633\u0631\u06d2 \u0627\u067e\u0631\u0648\u0686 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u0622\u067e \u0627\u0635\u0644 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0635\u062d\u06cc\u062d \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u06a9\u0646\u0641\u06cc\u06af\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u0679\u0627 \u06a9\u0631 \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>Mongo DB \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u06cc\u0633\u06d2 \u067e\u06cc\u06a9\u062c\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06a9\u0648 \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>mongodb-memory-server<\/code>. \u0679\u06cc\u0633\u0679 \u0631\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0679\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062a\u0645\u0627\u0645 \u0688\u06cc\u0679\u0627 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-how-to-set-up-the-environment-for-the-integration-tests\">\u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06cc\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h3>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc:<\/p>\n<ul>\n<li>\n<p><code>supertest<\/code>: \u0627\u06cc\u06a9 \u067e\u06cc\u06a9\u06cc\u062c \u062c\u0648 \u0622\u067e \u06a9\u0648 API \u06a9\u0627\u0644\u0632\/\u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0648\u0642\u062a \u062c\u0648\u0627\u0628\u0627\u062a \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>mongodb-memory-server<\/code>: \u0627\u06cc\u06a9 \u067e\u06cc\u06a9\u062c \u062c\u0648 \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-shell\"># command for pnpm package manager\npnpm add -D mongodb-memory-server supertest @types\/supertest\n\n# command for npm package manager\nnpm install --save-dev mongodb-memory-server supertest @types\/supertest\n\n# command for yarn package manager\nyarn add --dev mongodb-memory-server supertest @types\/supertest\n\n# command for bun package manager\nbun add -d mongodb-memory-server supertest @types\/supertest\n<\/code><\/pre>\n<p>\u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0633\u0631\u0648\u0631 \u0627\u0646\u0679\u0631\u06cc \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0646\u0648\u0688 \u06cc\u0627 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0633\u0631\u0648\u0631 \u0622\u0626\u0679\u0645 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0642\u0633\u0645 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0633\u06d2 \u0648\u0627\u0642\u0641 \u06c1\u0648\u06ba \u06af\u06d2\u060c \u062c\u06c1\u0627\u06ba \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">import express from \"express\";\nimport { loadEnvFile } from \"node:process\";\nimport connectToDB from \"..\/config\/dbConfig\";\nimport addContacts from \".\/controllers\/add-contacts.controller\";\n\nconst app = express();\nloadEnvFile();\nasync function dbConnection() {\n  await connectToDB();\n}\ndbConnection();\n\napp.use(express.json());\napp.post(\"\/add-contacts\", addContacts);\napp.listen(5000, () => console.log(\"the server successfully connected\"));\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u0679\u06be\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0639\u0636 \u0635\u0648\u0631\u062a\u0648\u06ba \u0645\u06cc\u06ba \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06cc\u06c1 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679\u0648\u06ba \u0645\u06cc\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u06a9\u06cc \u0645\u062b\u0627\u0644 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06c1\u0645 \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>app<\/code> \u0627\u06af\u0631 \u0622\u067e \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0627 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 DB \u06a9\u0646\u06a9\u0634\u0646 \u0622\u067e \u06a9\u06d2 \u0679\u06cc\u0633\u0679 DB \u06a9\u0646\u06a9\u0634\u0646 \u0633\u06d2 \u0645\u062a\u0635\u0627\u062f\u0645 \u06c1\u0648\u06af\u0627\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u06a9\u0627\u0645 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0646\u0627\u060c \u0627\u067e\u0646\u06cc \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0631\u060c \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0627\u06cc\u06a9\u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062f\u06c1 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0633\u0631\u0648\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<p><code>app.ts<\/code><\/p>\n<pre><code class=\"language-typescript\">import express from \"express\";\nimport addContacts from \".\/controllers\/add-contacts.controller\";\n\nconst app = express()\n\napp.use(express.json())\napp.post(\"\/add-contacts\", addContacts);\n\nexport default app;\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0645\u06cc\u0646 \u0641\u0627\u0626\u0644 <code>server.ts<\/code> \u06cc\u0627 <code>main.ts<\/code> \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>app<\/code> \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u062c\u06cc\u0633\u06d2:<\/p>\n<pre><code class=\"language-typescript\">import { loadEnvFile } from \"node:process\";\nimport connectToDB from \"..\/config\/dbConfig\";\nimport app from \".\/app\";\n\nloadEnvFile();\n\nasync function bootsrap() {\n  await connectToDB();\n  app.listen(5000, () => console.log(\"the server successfully connected\"));\n}\nbootsrap();\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644 \u0633\u06d2 \u0646\u06a9\u0627\u0644\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2: <code>app<\/code> \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>bootstrap()<\/code> \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0642\u0627\u0626\u0645 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a\u06d4 \u06cc\u06c1 \u06c1\u0645\u06cc\u06ba \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2: <code>addContact<\/code> \u0645\u0627\u0688\u06cc\u0648\u0644<\/p>\n<h3 id=\"heading-how-to-write-the-integration-tests\">\u0627\u0646\u0636\u0645\u0627\u0645 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0633\u06d2 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/h3>\n<p><strong>\u0679\u067e<\/strong>:\u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0622\u067e \u06a9\u0648 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u0627\u0633 \u0637\u0631\u062d \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba: <code>filename.integration.test.ts<\/code> \u06cc\u06c1 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0646\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u06a9\u0627 \u06a9\u0646\u0648\u0646\u0634\u0646 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u06a9\u0627 \u06a9\u0646\u0648\u0646\u0634\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u0627\u0633\u0679\u0648\u0631 \u0642\u0627\u0626\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <code>mongoose<\/code> \u0627\u0648\u0631 <code>mongdb-memory-server<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { afterAll, beforeAll, describe, expect, it } from \"vitest\";\n\nimport { MongoMemoryServer } from \"mongodb-memory-server\";\nimport mongoose from \"mongoose\";\nimport app from \"..\/src\/app\";\n\n\ndescribe(\"intergration test setup for add contact api\", () => {\n  let mongoServer: MongoMemoryServer;\n  let server: any;\n\n  beforeAll(async () => {\n    mongoServer = await MongoMemoryServer.create();\n    const uri = mongoServer.getUri();\n    await mongoose.connect(uri);\n    server = app.listen(0);\n  });\n\n  afterAll(async () => {\n    mongoServer.stop();\n    mongoose.disconnect();\n    server.close();\n  });\n});\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>beforeAll<\/code> \u0627\u0648\u0631 <code>afterAll<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 <code>vitest<\/code> \u0641\u0646\u06a9\u0634\u0646 <code>beforeAll<\/code> \u0679\u06cc\u0633\u0679 \u0631\u0646 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>afterAll<\/code> \u062a\u0645\u0627\u0645 \u0679\u06cc\u0633\u0679 \u0631\u0646\u0632 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0631\u0646\u0632\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0679\u06cc\u0633\u0679\u0648\u06ba \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644 \u0642\u0627\u0626\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06c1\u0645 <code>mongoServer<\/code> \u0645\u062a\u063a\u06cc\u0631 \u067e\u06be\u0631 \u0627\u0646\u062f\u0631 <code>beforeAll<\/code> \u0628\u0644\u0627\u06a9\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>MongoMemoryServer.create<\/code> \u0688\u06cc\u0679\u0627 \u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06c1\u0645\u06cc\u06ba \u06a9\u0646\u06a9\u0634\u0646 \u0633\u0679\u0631\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0644\u062a\u0627 \u06c1\u06d2: <code>uri<\/code> \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 <code>getUri<\/code> \u0637\u0631\u06cc\u0642\u06c1 \u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0645\u0646\u06af\u0648\u0632 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0646\u06a9\u0634\u0646 \u0633\u0679\u0631\u0646\u06af \u0633\u06d2 \u062c\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0631\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 \u067e\u0648\u0631\u0679 0 \u067e\u0631 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u067e\u0648\u0631\u0679 \u0646\u0645\u0628\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0645\u0638\u0627\u06c1\u0631\u06d2 \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0645\u062b\u0627\u0644 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0645\u06cc\u06ba <code>afterAll<\/code>\u062a\u0645\u0627\u0645 \u0679\u06cc\u0633\u0679 \u0631\u0646\u0632 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0633\u0631\u0648\u0631 \u0627\u0648\u0631 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc DB \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 Mongoose \u0645\u062b\u0627\u0644 \u06a9\u0648 \u0645\u0646\u0642\u0637\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u06cc \u06a9\u06d2 \u0627\u0646\u062f\u0631 <code>describe<\/code> \u067e\u06be\u0631 \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0627\u0648\u0631 \u062f\u0639\u0648\u06d2 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba (\u062c\u06cc\u0633\u06d2 \u0622\u067e \u0646\u06d2 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u062a\u06be\u0627)\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { afterAll, beforeAll, describe, expect, it } from \"vitest\";\nimport { MongoMemoryServer } from \"mongodb-memory-server\";\nimport mongoose from \"mongoose\";\nimport app from \"..\/src\/app\";\nimport request from \"supertest\";\nimport Contacts from \"..\/schema\/contactList\";\n\ndescribe(\"intergration test for add contact api\", () => {\n  \/*\n    Here we do server setup and database in memory setup that was discussed,\n    in the previous snippets for setting up integration data storage testing environment \n   *\/\n  const fakeContact = {\n    contactName: \"arnold\",\n    phoneNumber: 798600102,\n    email: \"arnoldjabo@gmail.com\",\n  };\n\n  describe(\"POST \/add-contacts\", () => {\n    it(\"creates a new record to the database\", async () => {\n      const response = await request(app)\n        .post(\"\/add-contacts\")\n        .send(fakeContact);\n\n       const contactList = await Contacts.findOne({\n        email: \"arnoldjabo@gmail.com\",\n      })!;\n      expect(contactList?.email).toBe(\"arnoldjabo@gmail.com\");\n      console.log(contactList);\n\n      expect(response.status).toBe(201);\n      expect(response.body).toEqual({\n        message: `successfully created ${fakeContact.contactName}`,\n      });\n    });\n  });\n});\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u0679\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u0679\u06cc\u0633\u0679 \u06a9\u0648 \u0627\u06cc\u0688 \u06a9\u0646\u0679\u06cc\u06a9\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u067e\u0648\u0633\u0679 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u06be\u0631 \u062c\u0627\u0646\u0686\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06d2 \u0627\u0646\u062f\u0631 <code>it<\/code> \u062c\u0633\u0645\u060c \u062c\u0648 \u06c1\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>request<\/code> \u0633\u06d2 <code>supertest<\/code> \u06c1\u0645 \u0627\u067e\u0646\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u06c1\u0648\u0626\u06d2 \u0633\u0631\u0648\u0631 \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0627\u0648\u0631 HTTP \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0648 \u0628\u06be\u06cc \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u06cc \u0622\u067e \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0648 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06be\u06cc\u062c\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 POST\u060c PATCH\u060c \u06cc\u0627 PUT\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>send<\/code>() \u0637\u0631\u06cc\u0642\u06c1 <code>request<\/code> \u06c1\u0645 \u062c\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06be\u06cc\u062c \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0645 \u0627\u06cc\u06a9 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06c1\u0645 \u062c\u0648\u0627\u0628 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u0633 \u0628\u0627\u062a \u067e\u0631 \u0628\u062d\u062b \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u062c\u0648\u0627\u0628 \u06a9\u06cc\u0633\u0627 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0633\u0631\u0648\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0688\u06cc\u0679\u0627 \u0627\u0646\u0679\u0631\u06cc \u067e\u0631 201 \u06a9\u0627 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0627\u06cc\u06a9 JSON \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0631\u0627\u0628\u0637\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0645 \u06cc\u06c1 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0639\u0648\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u062c\u0648\u0627\u0628 \u06a9\u06cc \u062d\u0627\u0644\u062a \u06c1\u0645\u0627\u0631\u06cc \u062a\u0648\u0642\u0639 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06cc\u06c1 \u06a9\u06c1 \u062c\u0648\u0627\u0628\u06cc \u062c\u0633\u0645 \u0627\u0633 \u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u063a\u0627\u0645 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06c1\u0645\u06cc\u06ba \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627: <code>contactList<\/code> \u0627\u0646 \u0631\u0627\u0628\u0637\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0646\u06c1\u06cc\u06ba \u06c1\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0631 \u06c1\u0645 <code>contactList<\/code> \u06a9\u0646\u0633\u0648\u0644 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc Mongo DB \u0645\u062b\u0627\u0644 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u06d2\u06d4 \u062c\u0628 \u0645\u06cc\u06ba \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u062a\u0627 \u06c1\u0648\u06ba \u062a\u0648 \u0645\u062c\u06be\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0646\u062a\u0627\u0626\u062c \u0645\u0644\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1787963743_750_Vitest-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633-\u0645\u06cc\u06ba-\u062e\u0648\u062f\u06a9\u0627\u0631-\u062c\u0627\u0646\u0686-\u06a9\u06cc\u0633\u06d2.png\" alt=\"\u06a9\u0646\u0633\u0648\u0644 \u0644\u0627\u06af\u0632 \u062f\u06a9\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u0645\u0648\u0627\u062f \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u067e\u0631\u0646\u0679 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0624\u0679 \u067e\u0679\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0622\u067e \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0645\u0648\u0646\u06af\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0637\u0631\u062d \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u0627\u0648\u0631 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-when-to-use-unit-vs-integration-tests\">\u06cc\u0648\u0646\u0679 \u0627\u0648\u0631 \u0627\u0646\u0636\u0645\u0627\u0645 \u0679\u06cc\u0633\u0679 \u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062a\u0648 \u0622\u067e \u06c1\u0631 \u0642\u0633\u0645 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u062e\u0627\u0644\u0635 \u0641\u0639\u0627\u0644\u06cc\u062a \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u0645\u062b\u0627\u0644\u060c \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0648\u0631 \u0627\u0646 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0628\u06cc\u0631\u0648\u0646\u06cc API \u06a9\u0627\u0644\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u06c1 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0633\u0631\u0648\u0633\u0632 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627\u0644\u0632\u060c \u0622\u067e \u06a9\u06d2 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062f\u06c1 \u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0645\u0630\u0627\u0642 \u0627\u0691\u0627\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<h2 id=\"heading-summary\">\u062e\u0644\u0627\u0635\u06c1<\/h2>\n<p>\u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648 \u0642\u0633\u0645 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u0627\u0648\u0631 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679\u06d4<\/p>\n<p>\u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u0648\u06c1 \u06a9\u0648\u0688 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u062d\u0635\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062e\u0627\u0644\u0635 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0645\u0648\u0632\u0648\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0648\u06c1 \u06a9\u0648\u0688 \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u0633\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0627\u0646\u0636\u0645\u0627\u0645 \u0627\u0648\u0631 \u0645\u0648\u0627\u0635\u0644\u0627\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u063a\u06cc\u0631 \u062e\u0627\u0644\u0635 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0636\u0645\u0648\u0646 \u06a9\u0627\u0631\u0622\u0645\u062f \u0644\u06af\u0627 \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0645\u062c\u06be\u06d2 \u0627\u06cc\u06a9 \u06a9\u0627\u0641\u06cc \u062e\u0631\u06cc\u062f\u06cc\u06ba\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0645\u0633\u0644\u0633\u0644 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 API \u0645\u0646\u0637\u0642 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u0648\u0686\u0646\u0627 \u0628\u0648\u062c\u06be\u0644 \u0627\u0648\u0631 \u0648\u0642\u062a \u0637\u0644\u0628 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be \u06a9\u0631 \u0648\u0642\u062a \u0627\u0648\u0631 \u062a\u0648\u0627\u0646\u0627\u0626\u06cc \u06a9\u06cc \u0628\u0686\u062a \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 IDE \u06a9\u0648 \u0686\u06be\u0648\u0691\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0648\u0626\u06cc \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":28461,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-28460","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/28460","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=28460"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/28460\/revisions"}],"predecessor-version":[{"id":28462,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/28460\/revisions\/28462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/28461"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=28460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=28460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=28460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}