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

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

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

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

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

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

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

  • आपको डेटाबेस इंस्टेंस बनाने की ज़रूरत नहीं है. इम्यूलेटर, ऐक्सेस किए गए किसी भी डेटाबेस इंस्टेंस को अपने-आप बना देगा.
  • हर नए डेटाबेस को बंद नियमों के साथ शुरू किया जाता है, इसलिए एडमिन के अलावा अन्य उपयोगकर्ता न तो पढ़ पाएंगे और न ही लिख पाएंगे.
  • हर एमुलेट किए गए डेटाबेस पर, स्पार्क प्लान की सीमाएं और कोटा लागू होते हैं. खास तौर पर, यह हर इंस्टेंस को 100 एक साथ कनेक्शन तक सीमित करता है.
  • कोई भी डेटाबेस, "owner" स्ट्रिंग को एडमिन के पुष्टि करने वाले टोकन के तौर पर स्वीकार करेगा.
  • फ़िलहाल, एम्युलेटर अन्य Firebase प्रॉडक्ट के साथ इंटरैक्ट नहीं करते हैं. विशेष रूप से, सामान्य फायरबेस प्रमाणीकरण प्रवाह काम नहीं करता है. इसके बजाय, 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 query पैरामीटर का इस्तेमाल करके डेटाबेस का नाम बताना होगा.

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

संस्करण 9 JavaScript SDK के साथ स्थानीय इकाई परीक्षण चलाएँ

Firebase, Security Rules की यूनिट टेस्टिंग लाइब्रेरी को अपने वर्शन 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 को कुछ समय के लिए बायपास किया जा सके.
  • टेस्ट सुइट और हर टेस्ट के लिए, 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().doc('/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 इंस्टेंस का इस्तेमाल, क्लाइंट SDK टूल के एपीआई (मॉड्यूलर 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>

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

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.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" और आपके "नियमों" को स्ट्रिंग के रूप में निर्दिष्ट करता है.

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.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" और आपके "नियमों" को स्ट्रिंग के रूप में निर्दिष्ट करता है.

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