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

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

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

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

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

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

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

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

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

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

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

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

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

v9 Rules Unit Testing लाइब्रेरी को हमेशा इम्यूलेटर के बारे में पता होता है. साथ ही, यह कभी भी आपके प्रोडक्शन संसाधनों को ऐक्सेस नहीं करती.

मॉड्यूलर इंपोर्ट स्टेटमेंट के 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 का इस्तेमाल करके, आसानी से उपलब्ध होने वाले ऐसे तरीके का इस्तेमाल करना जिससे कुछ समय के लिए इन शर्तों को अनदेखा किया जा सके.
  • टेस्ट सुइट और हर टेस्ट के लिए, before/after हुक सेट अप करना. साथ ही, टेस्ट डेटा और एनवायरमेंट को क्लीन अप करने के लिए कॉल करना. जैसे, 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 Auth टोकन अटैच नहीं होंगे.

अपने टेस्ट में, टेस्ट कॉन्टेक्स्ट ऑब्जेक्ट का इस्तेमाल करके, कॉन्फ़िगर किए गए किसी भी एम्युलेटर इंस्टेंस को ऐक्सेस करें. इनमें 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()

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

यह तरीका एक कॉलबैक फ़ंक्शन लेता है. यह Security-Rules-bypassing context लेता है और एक प्रॉमिस दिखाता है. प्रॉमिस के पूरा होने या अस्वीकार होने के बाद, कॉन्टेक्स्ट मिट जाएगा.

RulesTestEnvironment.cleanup()

यह तरीका, टेस्ट एनवायरमेंट में बनाए गए सभी RulesTestContexts को मिटा देता है. साथ ही, इससे जुड़े संसाधनों को भी मिटा देता है, ताकि टेस्ट को आसानी से बंद किया जा सके.

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

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

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

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

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 Client SDK के इस इंस्टेंस का इस्तेमाल, Client SDK API (मॉड्यूलर v9 या v9 कंपैट) के साथ किया जा सकता है.

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

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

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

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

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

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

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

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

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

किसी प्रॉडक्ट को चुनें, ताकि आपको यह पता चल सके कि Firebase Test SDK, एम्युलेटर के साथ इंटरफ़ेस करने के लिए किन तरीकों का इस्तेमाल करता है.

Cloud Firestore

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

यह तरीका, प्रोजेक्ट आईडी और विकल्पों में दिए गए auth वैरिएबल के हिसाब से, शुरू किया गया 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

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

यह फ़ंक्शन, डेटाबेस के नाम और विकल्पों में तय किए गए auth वैरिएबल ओवरराइड के हिसाब से, शुरू किया गया 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

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

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

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

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

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

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 v8 के लिए RUT लाइब्रेरी API

किसी प्रॉडक्ट को चुनें, ताकि आपको यह पता चल सके कि Firebase Test SDK, एम्युलेटर के साथ इंटरफ़ेस करने के लिए किन तरीकों का इस्तेमाल करता है.

Cloud Firestore

Cloud Firestore

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

यह तरीका, प्रोजेक्ट आईडी और विकल्पों में दिए गए auth वैरिएबल के हिसाब से, शुरू किया गया 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

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

यह फ़ंक्शन, डेटाबेस के नाम और विकल्पों में तय किए गए auth वैरिएबल ओवरराइड के हिसाब से, शुरू किया गया 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

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

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

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

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

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

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());