बिल्ड यूनिट टेस्ट

Firebase Local Emulator Suite की मदद से, अपने ऐप्लिकेशन की सुविधाओं और काम करने के तरीके की पुष्टि करना आसान हो जाता है. यह Firebase Security Rules के कॉन्फ़िगरेशन की पुष्टि करने के लिए भी एक बेहतरीन टूल है. किसी लोकल एनवायरमेंट में यूनिट टेस्ट चलाने और उन्हें ऑटोमेट करने के लिए, Firebase एमुलेटर का इस्तेमाल करें. इस दस्तावेज़ में बताए गए तरीकों से, आपको अपने ऐप्लिकेशन के लिए यूनिट टेस्ट बनाने और उन्हें ऑटोमेट करने में मदद मिलेगी. इससे आपके Rules की पुष्टि की जा सकेगी.

अगर आपने अब तक ऐसा नहीं किया है, तो Firebase एमुलेटर सेट अप करें.

एमुलेटर चलाने से पहले

एम्युलेटर का इस्तेमाल शुरू करने से पहले, इन बातों का ध्यान रखें:

  • एम्युलेटर, शुरुआत में आपकी firebase.json फ़ाइल के firestore.rules या 'storage.rules' फ़ील्ड में बताए गए नियमों को लोड करेगा. अगर फ़ाइल मौजूद नहीं है और आपने यहां बताए गए तरीके से loadFirestoreRules या 'loadStorageRules' का इस्तेमाल नहीं किया है, तो एमुलेटर सभी प्रोजेक्ट को ऐसे मानता है जिनमें नियम खुले हैं.
  • ज़्यादातर Firebase SDK टूल, एमुलेटर के साथ सीधे तौर पर काम करते हैं. हालांकि, सुरक्षा नियमों में सिर्फ़ @firebase/rules-unit-testing लाइब्रेरी, auth को मॉक करने की सुविधा देता है. इससे यूनिट टेस्ट करना बहुत आसान हो जाता है. इसके अलावा, यह लाइब्रेरी, एमुलेटर से जुड़ी कुछ सुविधाओं के साथ काम करती है. जैसे, नीचे दी गई सूची में बताई गई सभी सुविधाएं.
  • एम्युलेटर, क्लाइंट SDK टूल से मिले प्रोडक्शन Firebase पुष्टि टोकन को भी स्वीकार करेंगे और उसके मुताबिक नियमों का आकलन करेंगे. इससे आपका ऐप्लिकेशन, इंटिग्रेशन और मैन्युअल टेस्ट में मौजूद एम्युलेटर से सीधे कनेक्ट हो पाएगा.

डेटाबेस एमुलेटर और प्रोडक्शन के बीच अंतर

  • आपको डेटाबेस इंस्टेंस बनाने की ज़रूरत नहीं है. एमुलेटर, ऐक्सेस किए गए किसी भी डेटाबेस इंस्टेंस को अपने-आप बना देगा.
  • हर नया डेटाबेस, बंद नियमों के साथ शुरू होता है, ताकि एडमिन के अलावा अन्य उपयोगकर्ता, डेटा को न पढ़ पाएं और न ही उसमें बदलाव कर पाएं.
  • एमुलेट किए गए हर डेटाबेस पर, Spark प्लान की सीमाएं और कोटा लागू होते हैं. खास तौर पर, इससे हर इंस्टेंस पर एक साथ 100 कनेक्शन से ज़्यादा नहीं किए जा सकते.
  • कोई भी डेटाबेस, "owner" स्ट्रिंग को एडमिन के पुष्टि करने वाले टोकन के तौर पर स्वीकार करेगा.
  • फ़िलहाल, एम्युलेटर Firebase के दूसरे प्रॉडक्ट के साथ काम नहीं करते. ध्यान दें कि Firebase से पुष्टि करने का सामान्य तरीका काम नहीं करता. इसके बजाय, rules-unit-testing लाइब्रेरी में initializeTestApp() तरीके का इस्तेमाल किया जा सकता है. यह auth फ़ील्ड लेता है. इस तरीके का इस्तेमाल करके बनाया गया Firebase ऑब्जेक्ट, इस तरह काम करता है जैसे आपने जो भी इकाई दी है उसकी पुष्टि हो गई है. null पास करने पर, यह पुष्टि न किए गए उपयोगकर्ता की तरह काम करेगा. उदाहरण के लिए, auth != null नियम काम नहीं करेंगे.

Realtime Database एम्युलेटर के साथ इंटरैक्ट करना

प्रोडक्शन Firebase Realtime Database इंस्टेंस को firebaseio.com के सबडोमेन से ऐक्सेस किया जा सकता है. साथ ही, इस तरह से REST एपीआई ऐक्सेस किया जा सकता है:

https://<database_name>.firebaseio.com/path/to/my/data.json

यह एमुलेटर, डिवाइस पर ही चलता है और localhost:9000 पर उपलब्ध है. किसी खास डेटाबेस इंस्टेंस के साथ इंटरैक्ट करने के लिए, आपको डेटाबेस का नाम बताने के लिए ns क्वेरी पैरामीटर का इस्तेमाल करना होगा.

http://localhost:9000/path/to/my/data.json?ns=<database_name>

JavaScript SDK टूल के वर्शन 9 के साथ लोकल यूनिट टेस्ट चलाना

Firebase अपने वर्शन 9 JavaScript SDK और अपने वर्शन 8 SDK, दोनों के साथ सुरक्षा नियमों की यूनिट टेस्टिंग लाइब्रेरी उपलब्ध कराता है. लाइब्रेरी एपीआई काफ़ी अलग होते हैं. हमारा सुझाव है कि आप v9 टेस्टिंग लाइब्रेरी का इस्तेमाल करें. यह लाइब्रेरी ज़्यादा बेहतर है और एमुलेटर से कनेक्ट करने के लिए, इसे कम सेटअप करना पड़ता है. इससे, प्रोडक्शन रिसॉर्स का गलती से इस्तेमाल होने से बचा जा सकता है. पुराने सिस्टम के साथ काम करने की सुविधा के लिए, हम v8 टेस्टिंग लाइब्रेरी उपलब्ध कराते रहेंगे.

स्थानीय तौर पर चलने वाले एमुलेटर के साथ इंटरैक्ट करने के लिए, @firebase/rules-unit-testing मॉड्यूल का इस्तेमाल करें. अगर आपको टाइम आउट या ECONNREFUSED गड़बड़ियां मिलती हैं, तो दोबारा जांच लें कि एमुलेटर असल में चल रहा है या नहीं.

हमारा सुझाव है कि आप Node.js के नए वर्शन का इस्तेमाल करें, ताकि आप async/await नोटेशन का इस्तेमाल कर सकें. आपको जिन गतिविधियों की जांच करनी है उनमें से ज़्यादातर में एसिंक्रोनस फ़ंक्शन शामिल होते हैं. साथ ही, टेस्टिंग मॉड्यूल को प्रॉमिस पर आधारित कोड के साथ काम करने के लिए डिज़ाइन किया गया है.

नियमों के v9 वर्शन वाली यूनिट टेस्टिंग लाइब्रेरी, हमेशा एमुलेटर के बारे में जानती है और कभी भी आपके प्रोडक्शन संसाधनों का इस्तेमाल नहीं करती.

लाइब्रेरी को इंपोर्ट करने के लिए, v9 मॉड्यूलर इंपोर्ट स्टेटमेंट का इस्तेमाल किया जाता है. उदाहरण के लिए:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment
} from "@firebase/rules-unit-testing"

// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.

इंपोर्ट करने के बाद, यूनिट टेस्ट लागू करने के लिए:

  • initializeTestEnvironment को कॉल के साथ RulesTestEnvironment बनाना और कॉन्फ़िगर करना.
  • Rules को ट्रिगर किए बिना टेस्ट डेटा सेट अप करना. इसके लिए, एक आसान तरीका अपनाएं, जिससे कुछ समय के लिए इन समस्याओं को बायपास किया जा सके,RulesTestEnvironment.withSecurityRulesDisabled.
  • टेस्ट डेटा और एनवायरमेंट को साफ़ करने के लिए, कॉल के साथ टेस्ट सेट अप करना और हर टेस्ट से पहले/बाद के हुक सेट अप करना. जैसे, RulesTestEnvironment.cleanup() या RulesTestEnvironment.clearFirestore().
  • ऐसे टेस्ट केस लागू करना जो RulesTestEnvironment.authenticatedContext और RulesTestEnvironment.unauthenticatedContext का इस्तेमाल करके, पुष्टि की स्थितियों की नकल करते हैं.

सामान्य तरीके और यूटिलिटी फ़ंक्शन

मॉड्यूलर एपीआई का इस्तेमाल करके, एमुलेटर के हिसाब से टेस्ट करने के तरीके भी देखें.

initializeTestEnvironment() => RulesTestEnvironment

यह फ़ंक्शन, नियमों की यूनिट टेस्टिंग के लिए टेस्ट एनवायरमेंट को शुरू करता है. टेस्ट सेटअप के लिए, पहले इस फ़ंक्शन को कॉल करें. टास्क को पूरा करने के लिए, एम्युलेटर चालू होने चाहिए.

यह फ़ंक्शन, TestEnvironmentConfig के बारे में बताने वाले वैकल्पिक ऑब्जेक्ट को स्वीकार करता है. इसमें प्रोजेक्ट आईडी और एम्युलेटर कॉन्फ़िगरेशन की सेटिंग शामिल हो सकती हैं.

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

इस तरीके से एक RulesTestContext बनता है, जो पुष्टि किए गए Authentication उपयोगकर्ता की तरह काम करता है. दिखाए गए कॉन्टेक्स्ट की मदद से बनाए गए अनुरोधों में, एक मॉक Authentication टोकन जुड़ा होगा. इसके अलावा, Authentication टोकन पेलोड के लिए कस्टम दावे या बदलावों की जानकारी देने वाला ऑब्जेक्ट भी पास किया जा सकता है.

initializeTestEnvironment के साथ कॉन्फ़िगर किए गए एम्युलेटर इंस्टेंस के साथ-साथ कॉन्फ़िगर किए गए किसी भी एम्युलेटर इंस्टेंस को ऐक्सेस करने के लिए, अपने टेस्ट में लौटाए गए टेस्ट कॉन्टेक्स्ट ऑब्जेक्ट का इस्तेमाल करें.

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", { … });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

इस तरीके से RulesTestContext बनता है, जो किसी ऐसे क्लाइंट की तरह काम करता है जिसने Authentication से लॉग इन नहीं किया है. दिखाए गए कॉन्टेक्स्ट के ज़रिए किए गए अनुरोधों में Firebase ऑथराइज़ेशन टोकन अटैच नहीं होगा.

कॉन्फ़िगर किए गए किसी भी एमुलेटर इंस्टेंस को ऐक्सेस करने के लिए, अपने टेस्ट में दिखाए गए टेस्ट कॉन्टेक्स्ट ऑब्जेक्ट का इस्तेमाल करें. इनमें initializeTestEnvironment के साथ कॉन्फ़िगर किए गए इंस्टेंस भी शामिल हैं.

// Assuming a Cloud Storage app and the Storage emulator for this example
import { getStorage, ref, deleteObject } from "firebase/storage";

const alice = testEnv.unauthenticatedContext();

// Use the Cloud Storage instance associated with this context
const desertRef = ref(alice.storage(), 'images/desert.jpg');
await assertSucceeds(deleteObject(desertRef));

RulesTestEnvironment.withSecurityRulesDisabled()

टेस्ट सेटअप फ़ंक्शन को ऐसे कॉन्टेक्स्ट के साथ चलाएं जो सुरक्षा नियमों के बंद होने जैसा व्यवहार करता हो.

इस तरीके में कॉलबैक फ़ंक्शन लिया जाता है, जो सुरक्षा के नियमों को बायपास करते हुए कॉन्टेक्स्ट लेता है और प्रॉमिस देता है. प्रॉमिस सुलझने / अस्वीकार होने के बाद, संदर्भ को मिटा दिया जाएगा.

RulesTestEnvironment.cleanup()

यह तरीका, टेस्टिंग एनवायरमेंट में बनाए गए सभी RulesTestContexts को मिटा देता है और मौजूदा संसाधनों को हटा देता है. इससे, टेस्टिंग से बाहर निकलने में आसानी होती है.

इस तरीके से, किसी भी तरह से एमुलेटर की स्थिति में बदलाव नहीं होता. टेस्ट के बीच डेटा रीसेट करने के लिए, ऐप्लिकेशन एम्युलेटर के हिसाब से डेटा मिटाने का तरीका अपनाएं.

assertSucceeds(pr: Promise<any>)) => Promise<any>

यह टेस्ट केस यूटिलिटी फ़ंक्शन है.

फ़ंक्शन में दावा किया गया है कि एम्युलेटर ऑपरेशन के लिए उपलब्ध 'प्रॉमिस' में कोई गड़बड़ी नहीं है. इससे, सुरक्षा के नियमों का उल्लंघन नहीं किया जाएगा.

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

यह टेस्ट केस यूटिलिटी फ़ंक्शन है.

यह फ़ंक्शन यह दावा करता है कि एमुलेटर ऑपरेशन को रैप करने वाले प्रॉमिस को, सुरक्षा नियमों के उल्लंघन की वजह से अस्वीकार कर दिया जाएगा.

await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });

एमुलेटर के हिसाब से तरीके

मॉड्यूलर एपीआई का इस्तेमाल करके, जांच के सामान्य तरीके और काम के फ़ंक्शन भी देखें.

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

इस तरीके से, Firestore डेटाबेस में मौजूद वह डेटा मिट जाता है जो Firestore एमुलेटर के लिए कॉन्फ़िगर किए गए projectId से जुड़ा होता है.

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

इस तरीके से, इस टेस्ट कॉन्टेक्स्ट के लिए Firestore इंस्टेंस मिलता है. दिखाए गए Firebase JS क्लाइंट SDK टूल के इंस्टेंस का इस्तेमाल, क्लाइंट SDK टूल के एपीआई (v9 मॉड्यूलर या v9 के साथ काम करने वाला) के साथ किया जा सकता है.

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

इस तरीके से, Realtime Database में मौजूद वह डेटा मिट जाता है जो Realtime Database एमुलेटर के लिए कॉन्फ़िगर किए गए projectId से जुड़ा होता है.

RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;

जांच के इस कॉन्टेक्स्ट के लिए Realtime Database इंस्टेंस पाएं. दिखाए गए Firebase JS क्लाइंट SDK टूल के इंस्टेंस का इस्तेमाल, क्लाइंट SDK टूल के एपीआई (मॉड्यूलर या नेमस्पेस वाले, वर्शन 9 या इसके बाद के वर्शन) के साथ किया जा सकता है. यह तरीका, रीयलटाइम डेटाबेस इंस्टेंस का यूआरएल स्वीकार करता है. अगर यह पैरामीटर दिया गया है, तो यूआरएल से निकाले गए पैरामीटर के साथ नेमस्पेस के एमुलेट किए गए वर्शन का एक इंस्टेंस दिखाता है.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

इस तरीके से, स्टोरेज बकेट में मौजूद ऑब्जेक्ट और मेटाडेटा को हटाया जाता है. ये चीज़ें, Cloud Storage एम्युलेटर के लिए कॉन्फ़िगर किए गए projectId से जुड़ी होती हैं.

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

यह तरीका एम्युलेटर से कनेक्ट करने के लिए कॉन्फ़िगर किया गया स्टोरेज इंस्टेंस दिखाता है. यह तरीका, जांच के लिए Firebase स्टोरेज बकेट का gs:// यूआरएल स्वीकार करता है. अगर यह पैरामीटर दिया गया है, तो बकेट के नाम के एमुलेट किए गए वर्शन के लिए, Storage इंस्टेंस दिखाता है.

v8 JavaScript SDK टूल की मदद से लोकल यूनिट टेस्ट करना

Firebase Test SDK टूल के ज़रिए, एमुलेटर के साथ इंटरफ़ेस करने के तरीकों को देखने के लिए कोई प्रॉडक्ट चुनें.

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

यह तरीका, विकल्पों में दिए गए प्रोजेक्ट आईडी और पुष्टि करने वाले वैरिएबल के हिसाब से, शुरू किया गया Firebase ऐप्लिकेशन दिखाता है. इसका इस्तेमाल करके, जांच के लिए इस्तेमाल किया जाने वाला ऐप्लिकेशन बनाएं. इसमें, किसी खास उपयोगकर्ता के तौर पर पुष्टि की गई जानकारी का इस्तेमाल किया जाता है.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

इस तरीके से, एडमिन के तौर पर इस्तेमाल किया जाने वाला Firebase ऐप्लिकेशन शुरू हो जाता है. यह ऐप्लिकेशन, डेटा पढ़ने और उसमें बदलाव करने के दौरान, सुरक्षा से जुड़े नियमों को बायपास कर देता है. टेस्ट की स्थिति सेट करने के लिए, एडमिन के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाने के लिए इसका इस्तेमाल करें.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] इस तरीके से, फ़िलहाल शुरू किए गए सभी टेस्ट और एडमिन ऐप्लिकेशन दिखते हैं. इसका इस्तेमाल करके, टेस्ट के बीच या उसके बाद ऐप्लिकेशन को हटाएं.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

यह तरीका, स्थानीय तौर पर चल रहे डेटाबेस में नियम भेजता है. यह एक ऐसा ऑब्जेक्ट लेता है जो नियमों को स्ट्रिंग के तौर पर बताता है. अपने डेटाबेस के नियम सेट करने के लिए, इस तरीके का इस्तेमाल करें.

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

इस तरीके से ऐसा प्रॉमिस दिखाया जाता है जिसे इनपुट सही होने पर अस्वीकार कर दिया जाता है या इनपुट के अस्वीकार होने पर पूरा होता है. इसका इस्तेमाल करके यह पता लगाया जा सकता है कि डेटाबेस को पढ़ने या उसमें डेटा डालने में कोई गड़बड़ी हुई है या नहीं.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

यह तरीका एक प्रॉमिस दिखाता है. अगर इनपुट स्वीकार कर लिया जाता है, तो प्रॉमिस पूरा हो जाता है और अगर इनपुट अस्वीकार कर दिया जाता है, तो प्रॉमिस अस्वीकार कर दिया जाता है. इसका इस्तेमाल करके यह पता लगाया जा सकता है कि डेटाबेस को पढ़ने या उसमें डेटा डालने की प्रोसेस पूरी हुई है या नहीं.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

इस तरीके से, स्थानीय तौर पर चल रहे Firestore इंस्टेंस में किसी प्रोजेक्ट से जुड़ा सारा डेटा मिट जाता है. टेस्ट के बाद, डेटा मिटाने के लिए इस तरीके का इस्तेमाल करें.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

इसका इस्तेमाल करके, किसी खास उपयोगकर्ता के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं, ताकि उसे टेस्ट में इस्तेमाल किया जा सके.

यह फ़ंक्शन, विकल्पों में बताए गए डेटाबेस के नाम और पुष्टि करने के लिए इस्तेमाल किए जाने वाले वैरिएबल के बदले, शुरू किया गया Firebase ऐप्लिकेशन दिखाता है.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

इसका इस्तेमाल करके, एडमिन के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं. इससे, टेस्ट के लिए स्टेटस सेट अप किया जा सकता है.

विकल्पों में दिए गए डेटाबेस के नाम के हिसाब से, शुरू किया गया एडमिन Firebase ऐप्लिकेशन दिखाता है. यह ऐप्लिकेशन डेटाबेस में लिखते और पढ़ते समय, सुरक्षा नियमों को बायपास करता है.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

अपने डेटाबेस के नियम सेट करने के लिए, इसका इस्तेमाल करें.

स्थानीय तौर पर चल रहे डेटाबेस में नियम भेजता है. यह विकल्पों का एक ऑब्जेक्ट लेता है, जो आपके "databaseName" और "rules" को स्ट्रिंग के तौर पर दिखाता है.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

फ़िलहाल शुरू किए गए सभी टेस्ट और एडमिन ऐप्लिकेशन दिखाता है.

टेस्ट के बीच या उसके बाद, ऐप्लिकेशन को साफ़ करने के लिए इसका इस्तेमाल करें. ध्यान दें कि चालू लिसनर वाले शुरू किए गए ऐप्लिकेशन, JavaScript को बाहर निकलने से रोकते हैं:

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

ऐसा प्रॉमिस दिखाता है जिसे इनपुट पूरा होने पर अस्वीकार कर दिया जाता है. साथ ही, इनपुट अस्वीकार होने पर पूरा होता है.

डेटाबेस को पढ़ने या उसमें डेटा सेव करने में हुई गड़बड़ी की पुष्टि करने के लिए, इसका इस्तेमाल करें:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

यह एक ऐसा प्रॉमिस है जो इनपुट के सही होने पर पूरा होता है और इनपुट के अस्वीकार होने पर अस्वीकार कर दिया जाता है.

डेटाबेस को पढ़ने या उसमें कुछ लिखने की पुष्टि करने के लिए, इसका इस्तेमाल करें:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud Storage

Cloud Storage

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

इसका इस्तेमाल करके, किसी खास उपयोगकर्ता के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं, ताकि उसे टेस्ट में इस्तेमाल किया जा सके.

यह स्टोरेज बकेट के नाम और विकल्पों में बताए गए पुष्टि करने वाले वैरिएबल के बदले, शुरू किया गया Firebase ऐप्लिकेशन दिखाता है.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

इसका इस्तेमाल करके, एडमिन के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं. इससे, टेस्ट के लिए स्टेटस सेट अप किया जा सकता है.

विकल्पों में दिए गए स्टोरेज बकेट के नाम के हिसाब से, शुरू किया गया एडमिन फ़ायरबेस ऐप्लिकेशन दिखाता है. बकेट में पढ़ते और लिखते समय, यह ऐप्लिकेशन सुरक्षा नियमों को बायपास करता है.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

अपनी स्टोरेज बकेट के नियम सेट करने के लिए, इसका इस्तेमाल करें.

स्थानीय तौर पर मैनेज की जाने वाली स्टोरेज बकेट में नियम भेजता है. यह विकल्पों का एक ऑब्जेक्ट लेता है, जो आपके "storageBucket" और "rules" को स्ट्रिंग के तौर पर दिखाता है.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

फ़िलहाल शुरू किए गए सभी टेस्ट और एडमिन ऐप्लिकेशन दिखाता है.

टेस्ट के बीच या उसके बाद, ऐप्लिकेशन को साफ़ करने के लिए इसका इस्तेमाल करें. ध्यान दें कि चालू लिसनर वाले शुरू किए गए ऐप्लिकेशन, JavaScript को बाहर निकलने से रोकते हैं:

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

यह एक ऐसा प्रॉमिस दिखाता है जो इनपुट के सही होने पर अस्वीकार हो जाता है और इनपुट के अस्वीकार होने पर पूरा हो जाता है.

इसका इस्तेमाल करके यह बताएं कि स्टोरेज बकेट में डेटा पढ़ने या उसमें डेटा लिखने में कोई गड़बड़ी हुई है:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

यह एक ऐसा प्रॉमिस दिखाता है जो इनपुट के सही होने पर पूरा होता है और इनपुट के अस्वीकार होने पर अस्वीकार हो जाता है.

इसका इस्तेमाल करके दावा करें कि स्टोरेज बकेट को रीड या राइट कर लिया गया है:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());

JS SDK टूल के वर्शन 8 के लिए RUT लाइब्रेरी एपीआई

Firebase Test SDK टूल के ज़रिए, एमुलेटर के साथ इंटरफ़ेस करने के तरीकों को देखने के लिए कोई प्रॉडक्ट चुनें.

Cloud Firestore

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

यह तरीका, विकल्पों में दिए गए प्रोजेक्ट आईडी और पुष्टि करने वाले वैरिएबल के हिसाब से, शुरू किया गया Firebase ऐप्लिकेशन दिखाता है. इसका इस्तेमाल करके, जांच के लिए इस्तेमाल किया जाने वाला ऐप्लिकेशन बनाएं. इसमें, किसी खास उपयोगकर्ता के तौर पर पुष्टि की गई जानकारी का इस्तेमाल किया जाता है.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

इस तरीके से, एडमिन के तौर पर इस्तेमाल किया जाने वाला Firebase ऐप्लिकेशन शुरू हो जाता है. यह ऐप्लिकेशन, डेटा पढ़ने और उसमें बदलाव करने के दौरान, सुरक्षा से जुड़े नियमों को बायपास कर देता है. टेस्ट की स्थिति सेट करने के लिए, एडमिन के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाने के लिए इसका इस्तेमाल करें.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] इस तरीके से, फ़िलहाल शुरू किए गए सभी टेस्ट और एडमिन ऐप्लिकेशन दिखते हैं. इसका इस्तेमाल करके, टेस्ट के बीच या उसके बाद ऐप्लिकेशन को हटाएं.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

यह तरीका, स्थानीय तौर पर चल रहे डेटाबेस में नियम भेजता है. यह एक ऐसा ऑब्जेक्ट लेता है जो नियमों को स्ट्रिंग के तौर पर बताता है. अपने डेटाबेस के नियम सेट करने के लिए, इस तरीके का इस्तेमाल करें.

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

इस तरीके से ऐसा प्रॉमिस दिखाया जाता है जिसे इनपुट सही होने पर अस्वीकार कर दिया जाता है या इनपुट के अस्वीकार होने पर पूरा होता है. इसका इस्तेमाल करके यह पता लगाया जा सकता है कि डेटाबेस को पढ़ने या उसमें डेटा डालने में कोई गड़बड़ी हुई है या नहीं.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

यह तरीका एक प्रॉमिस दिखाता है. अगर इनपुट स्वीकार कर लिया जाता है, तो प्रॉमिस पूरा हो जाता है और अगर इनपुट अस्वीकार कर दिया जाता है, तो प्रॉमिस अस्वीकार कर दिया जाता है. इसका इस्तेमाल करके यह पता लगाया जा सकता है कि डेटाबेस को पढ़ने या उसमें डेटा डालने की प्रोसेस पूरी हुई है या नहीं.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

इस तरीके से, स्थानीय तौर पर चल रहे Firestore इंस्टेंस में किसी प्रोजेक्ट से जुड़ा सारा डेटा मिट जाता है. टेस्ट के बाद, डेटा मिटाने के लिए इस तरीके का इस्तेमाल करें.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

इसका इस्तेमाल करके, किसी खास उपयोगकर्ता के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं, ताकि उसे टेस्ट में इस्तेमाल किया जा सके.

यह फ़ंक्शन, विकल्पों में बताए गए डेटाबेस के नाम और पुष्टि करने के लिए इस्तेमाल किए जाने वाले वैरिएबल के बदले, शुरू किया गया Firebase ऐप्लिकेशन दिखाता है.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

इसका इस्तेमाल करके, एडमिन के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं. इससे, टेस्ट के लिए स्टेटस सेट अप किया जा सकता है.

विकल्पों में दिए गए डेटाबेस के नाम के हिसाब से, शुरू किया गया एडमिन Firebase ऐप्लिकेशन दिखाता है. यह ऐप्लिकेशन डेटाबेस में लिखते और पढ़ते समय, सुरक्षा नियमों को बायपास करता है.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

अपने डेटाबेस के नियम सेट करने के लिए, इसका इस्तेमाल करें.

स्थानीय तौर पर चल रहे डेटाबेस में नियम भेजता है. यह विकल्पों का एक ऑब्जेक्ट लेता है, जो आपके "databaseName" और "rules" को स्ट्रिंग के तौर पर दिखाता है.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

फ़िलहाल शुरू किए गए सभी टेस्ट और एडमिन ऐप्लिकेशन दिखाता है.

टेस्ट के बीच या उसके बाद, ऐप्लिकेशन को साफ़ करने के लिए इसका इस्तेमाल करें. ध्यान दें कि चालू लिसनर वाले शुरू किए गए ऐप्लिकेशन, JavaScript को बाहर निकलने से रोकते हैं:

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

ऐसा प्रॉमिस दिखाता है जिसे इनपुट पूरा होने पर अस्वीकार कर दिया जाता है. साथ ही, इनपुट अस्वीकार होने पर पूरा होता है.

डेटाबेस को पढ़ने या उसमें डेटा सेव करने में हुई गड़बड़ी की पुष्टि करने के लिए, इसका इस्तेमाल करें:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

यह एक ऐसा प्रॉमिस है जो इनपुट के सही होने पर पूरा होता है और इनपुट के अस्वीकार होने पर अस्वीकार कर दिया जाता है.

डेटाबेस को पढ़ने या उसमें कुछ लिखने की पुष्टि करने के लिए, इसका इस्तेमाल करें:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud Storage

Cloud Storage

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

इसका इस्तेमाल करके, किसी खास उपयोगकर्ता के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं, ताकि उसे टेस्ट में इस्तेमाल किया जा सके.

यह स्टोरेज बकेट के नाम और विकल्पों में बताए गए पुष्टि करने वाले वैरिएबल के बदले, शुरू किया गया Firebase ऐप्लिकेशन दिखाता है.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

इसका इस्तेमाल करके, एडमिन के तौर पर पुष्टि किया गया ऐप्लिकेशन बनाएं. इससे, टेस्ट के लिए स्टेटस सेट अप किया जा सकता है.

विकल्पों में दिए गए स्टोरेज बकेट के नाम के हिसाब से, शुरू किया गया एडमिन फ़ायरबेस ऐप्लिकेशन दिखाता है. बकेट में पढ़ते और लिखते समय, यह ऐप्लिकेशन सुरक्षा नियमों को बायपास करता है.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

अपनी स्टोरेज बकेट के नियम सेट करने के लिए, इसका इस्तेमाल करें.

स्थानीय तौर पर मैनेज की जाने वाली स्टोरेज बकेट में नियम भेजता है. यह विकल्पों का एक ऑब्जेक्ट लेता है, जो आपके "storageBucket" और "rules" को स्ट्रिंग के तौर पर दिखाता है.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

फ़िलहाल शुरू किए गए सभी टेस्ट और एडमिन ऐप्लिकेशन दिखाता है.

टेस्ट के बीच या उसके बाद, ऐप्लिकेशन को साफ़ करने के लिए इसका इस्तेमाल करें. ध्यान दें कि चालू लिसनर वाले शुरू किए गए ऐप्लिकेशन, JavaScript को बाहर निकलने से रोकते हैं:

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

यह एक ऐसा प्रॉमिस दिखाता है जो इनपुट के सही होने पर अस्वीकार हो जाता है और इनपुट के अस्वीकार होने पर पूरा हो जाता है.

इसका इस्तेमाल करके यह बताएं कि स्टोरेज बकेट में डेटा पढ़ने या उसमें डेटा लिखने में कोई गड़बड़ी हुई है:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

यह एक ऐसा प्रॉमिस दिखाता है जो इनपुट के सही होने पर पूरा होता है और इनपुट के अस्वीकार होने पर अस्वीकार हो जाता है.

इसका इस्तेमाल करके यह बताएं कि स्टोरेज बकेट में डेटा पढ़ने या उसमें डेटा लिखने की प्रोसेस पूरी हो गई है:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());