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

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

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

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

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

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

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

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

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

JavaScript SDK के वर्शन 9 की मदद से, लोकल यूनिट टेस्ट चलाना

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

RulesTestEnvironment.cleanup()

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

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

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

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

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

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

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

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

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

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 में मौजूद उस डेटा को मिटाता है जो Realtime Database एम्युलेटर के लिए कॉन्फ़िगर किए गए projectId से जुड़ा है.

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

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

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

यह तरीका, प्रोजेक्ट आईडी और विकल्पों में दिए गए 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());