Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Construir pruebas unitarias

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Firebase Local Emulator Suite facilita la validación completa de las características y el comportamiento de su aplicación. También es una excelente herramienta para verificar las configuraciones de las reglas de seguridad de Firebase. Usa los emuladores de Firebase para ejecutar y automatizar pruebas unitarias en un entorno local. Los métodos descritos en este documento deberían ayudarlo a medida que crea y automatiza pruebas unitarias para su aplicación que validan sus Reglas.

Si aún no lo ha hecho, configure los emuladores de Firebase .

Antes de ejecutar el emulador

Antes de comenzar a usar el emulador, tenga en cuenta lo siguiente:

  • El emulador cargará inicialmente las reglas especificadas en el campo firestore.rules o 'storage.rules' de su archivo firebase.json . Si el archivo no existe y no usa el loadFirestoreRules o 'loadStorageRules' como se describe a continuación, el emulador trata todos los proyectos como si tuvieran reglas abiertas.
  • Si bien la mayoría de los SDK de Firebase funcionan directamente con los emuladores, solo la @firebase/rules-unit-testing admite la auth en las reglas de seguridad, lo que facilita mucho las pruebas unitarias. Además, la biblioteca admite algunas características específicas del emulador, como borrar todos los datos, como se indica a continuación.
  • Los emuladores también aceptarán tokens de Firebase Auth de producción proporcionados a través de SDK de cliente y evaluarán las reglas en consecuencia, lo que permite conectar su aplicación directamente a los emuladores en la integración y las pruebas manuales.

Diferencias entre los emuladores de base de datos y producción

  • No tiene que crear explícitamente una instancia de base de datos. El emulador creará automáticamente cualquier instancia de base de datos a la que se acceda.
  • Cada nueva base de datos se inicia con reglas cerradas, por lo que los usuarios que no sean administradores no podrán leer ni escribir.
  • Cada base de datos emulada aplica los límites y cuotas del plan de Spark (sobre todo, esto limita cada instancia a 100 conexiones simultáneas).
  • Cualquier base de datos aceptará la cadena "owner" como un token de autenticación de administrador.
  • Actualmente, los emuladores no tienen interacciones funcionales con otros productos de Firebase. En particular, el flujo normal de autenticación de Firebase no funciona. En su lugar, puede usar el método initializeTestApp() en la biblioteca rules-unit-testing , que toma un campo de auth . El objeto de Firebase creado con este método se comporta como si se hubiera autenticado correctamente como cualquier entidad que proporcione. Si pasa null , se comportará como un usuario no autenticado (las reglas auth != null fallarán, por ejemplo).

Interactuando con el emulador de Realtime Database

Se puede acceder a una instancia de producción de Firebase Realtime Database en un subdominio de firebaseio.com , y puede acceder a la API REST de esta manera:

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

El emulador se ejecuta localmente y está disponible en localhost:9000 . Para interactuar con una instancia de base de datos específica, deberá usar el parámetro de consulta ns para especificar el nombre de la base de datos.

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

Ejecute pruebas de unidades locales con el SDK de JavaScript de la versión 9

Firebase distribuye una biblioteca de pruebas unitarias de reglas de seguridad con su SDK de JavaScript de la versión 9 y su SDK de la versión 8. Las API de la biblioteca son significativamente diferentes. Recomendamos la biblioteca de prueba v9, que está más optimizada y requiere menos configuración para conectarse a los emuladores y, por lo tanto, evitar el uso accidental de recursos de producción de forma segura. Para compatibilidad con versiones anteriores, continuamos poniendo a disposición la biblioteca de prueba v8 .

Use el @firebase/rules-unit-testing para interactuar con el emulador que se ejecuta localmente. Si obtiene tiempos de espera o errores ECONNREFUSED , vuelva a verificar que el emulador se esté ejecutando.

Recomendamos enfáticamente usar una versión reciente de Node.js para que pueda usar la notación async/await . Casi todo el comportamiento que podría querer probar involucra funciones asincrónicas, y el módulo de prueba está diseñado para funcionar con código basado en Promise.

La biblioteca de pruebas unitarias de reglas v9 siempre está al tanto de los emuladores y nunca toca sus recursos de producción.

La biblioteca se importa mediante sentencias de importación modular v9. Por ejemplo:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment,
  RulesTestEnvironment,
} 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.

Una vez importados, implementar pruebas unitarias implica:

  • Crear y configurar un RulesTestEnvironment con una llamada a initializeTestEnvironment .
  • Configuración de datos de prueba sin activar Reglas, usando un método conveniente que le permite omitirlos temporalmente, RulesTestEnvironment.withSecurityRulesDisabled .
  • Configurar el conjunto de pruebas y los ganchos antes/después de cada prueba con llamadas para limpiar los datos y el entorno de prueba, como RulesTestEnvironment.cleanup() o RulesTestEnvironment.clearFirestore() .
  • Implementar casos de prueba que imiten estados de autenticación usando RulesTestEnvironment.authenticatedContext y RulesTestEnvironment.unauthenticatedContext .

Métodos comunes y funciones de utilidad

Consulte también los métodos de prueba específicos del emulador en el SDK v9 .

initializeTestEnvironment() => RulesTestEnvironment

Esta función inicializa un entorno de prueba para las pruebas unitarias de reglas. Primero llame a esta función para la configuración de prueba. La ejecución exitosa requiere que los emuladores se estén ejecutando.

La función acepta un objeto opcional que define un TestEnvironmentConfig , que puede consistir en un ID de proyecto y ajustes de configuración del emulador.

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

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

Este método crea un RulesTestContext , que se comporta como un usuario de autenticación autenticado. Las solicitudes creadas a través del contexto devuelto tendrán adjunto un token de autenticación simulado. Opcionalmente, pase un objeto que defina reclamos personalizados o anulaciones para las cargas útiles del token de autenticación.

Use el objeto de contexto de prueba devuelto en sus pruebas para acceder a cualquier instancia de emulador configurada, incluidas las configuradas con 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

Este método crea un RulesTestContext , que se comporta como un cliente que no ha iniciado sesión a través de la autenticación. Las solicitudes creadas a través del contexto devuelto no tendrán tokens de autenticación de Firebase adjuntos.

Use el objeto de contexto de prueba devuelto en sus pruebas para acceder a cualquier instancia de emulador configurada, incluidas las configuradas con 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()

Ejecute una función de configuración de prueba con un contexto que se comporte como si las Reglas de seguridad estuvieran deshabilitadas.

Este método toma una función de devolución de llamada, que toma el contexto de omisión de reglas de seguridad y devuelve una promesa. El contexto se destruirá una vez que la promesa se resuelva/rechace.

RulesTestEnvironment.cleanup()

Este método destruye todos los RulesTestContexts creados en el entorno de prueba y limpia los recursos subyacentes, lo que permite una salida limpia.

Este método no cambia el estado de los emuladores de ninguna manera. Para restablecer los datos entre pruebas, use el método de borrado de datos específico del emulador de la aplicación.

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

Esta es una función de utilidad de caso de prueba.

La función afirma que la Promesa suministrada que envuelve una operación de emulador se resolverá sin violaciones de las reglas de seguridad.

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

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

Esta es una función de utilidad de caso de prueba.

La función afirma que la Promesa suministrada que envuelve una operación de emulador será rechazada con una violación de las Reglas de seguridad.

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

Métodos específicos del emulador

Consulte también los métodos de prueba comunes y las funciones de utilidad en el SDK v9 .

Tienda de fuego en la nube

Tienda de fuego en la nube

RulesTestEnvironment.clearFirestore() => Promise<void>

Este método borra los datos en la base de datos de Firestore que pertenecen al projectId configurado para el emulador de Firestore.

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

Este método obtiene una instancia de Firestore para este contexto de prueba. La instancia de Firebase JS Client SDK devuelta se puede usar con las API de SDK de cliente (v9 modular o v9 compat).

Base de datos en tiempo real

Base de datos en tiempo real

RulesTestEnvironment.clearDatabase() => Promise<void>

Este método borra los datos en Realtime Database que pertenecen al projectId configurado para el emulador de Realtime Database.

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

Obtenga una instancia de Realtime Database para este contexto de prueba. La instancia de Firebase JS Client SDK devuelta se puede usar con las API de SDK de cliente (v9 modular o v9 compat). El método acepta una URL de la instancia de Realtime Database. Si se especifica, devuelve una instancia de una versión emulada del espacio de nombres con parámetros extraídos de la URL.

Almacenamiento en la nube

Almacenamiento en la nube

RulesTestEnvironment.clearStorage() => Promise<void>

Este método borra objetos y metadatos en depósitos de almacenamiento que pertenecen al projectId de proyecto configurado para el emulador de Cloud Storage.

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

Este método devuelve una instancia de almacenamiento configurada para conectarse al emulador. El método acepta una URL gs:// en Firebase Storage Bucket para realizar pruebas. Si se especifica, devuelve una instancia de Storage para una versión emulada del nombre del depósito.

Ejecute pruebas de unidades locales con el SDK de JavaScript v8

Seleccione un producto para ver los métodos que utiliza Firebase Test SDK para interactuar con el emulador.

Tienda de fuego en la nube

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

Este método devuelve una aplicación de Firebase inicializada correspondiente al ID del proyecto y la variable de autenticación especificada en las opciones. Use esto para crear una aplicación autenticada como un usuario específico para usar en las pruebas.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

Este método devuelve una aplicación Firebase de administración inicializada. Esta aplicación pasa por alto las reglas de seguridad al realizar lecturas y escrituras. Use esto para crear una aplicación autenticada como administrador para establecer el estado de las pruebas.

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

apps() => [FirebaseApp] Este método devuelve todas las aplicaciones de prueba y administración actualmente inicializadas. Use esto para limpiar aplicaciones entre o después de las pruebas.

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

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

Este método envía reglas a una base de datos que se ejecuta localmente. Toma un objeto que especifica las reglas como una cadena. Utilice este método para establecer las reglas de su base de datos.

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

assertFails(pr: Promise) => Promise

Este método devuelve una promesa que se rechaza si la entrada tiene éxito o que tiene éxito si se rechaza la entrada. Use esto para confirmar si falla la lectura o escritura de una base de datos.

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

assertSucceeds(pr: Promise) => Promise

Este método devuelve una promesa que tiene éxito si la entrada tiene éxito y se rechaza si se rechaza la entrada. Use esto para confirmar si la lectura o escritura de una base de datos es exitosa.

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

clearFirestoreData({ projectId: string }) => Promise

Este método borra todos los datos asociados con un proyecto en particular en la instancia de Firestore que se ejecuta localmente. Utilice este método para limpiar después de las pruebas.

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

Base de datos en tiempo real

Base de datos en tiempo real

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

Use esto para crear una aplicación autenticada como un usuario específico para usar en las pruebas.

Devuelve una aplicación Firebase inicializada correspondiente al nombre de la base de datos y la anulación de la variable de autenticación especificada en las opciones.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Use esto para crear una aplicación autenticada como administrador para configurar el estado de las pruebas.

Devuelve una aplicación Firebase de administrador inicializada correspondiente al nombre de la base de datos especificado en las opciones. Esta aplicación pasa por alto las reglas de seguridad al leer y escribir en la base de datos.

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

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

Use esto para establecer las reglas de su base de datos.

Envía reglas a una base de datos que se ejecuta localmente. Toma un objeto de opciones que especifica su "nombre de la base de datos" y sus "reglas" como cadenas.

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

apps() => [FirebaseApp]

Devuelve todas las aplicaciones de prueba y administración actualmente inicializadas.

Use esto para limpiar aplicaciones entre o después de las pruebas (tenga en cuenta que las aplicaciones inicializadas con escuchas activas evitan que JavaScript se cierre):

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

assertFails(pr: Promise) => Promise

Devuelve una promesa que se rechaza si la entrada se realiza correctamente y se realiza correctamente si se rechaza la entrada.

Use esto para afirmar que una base de datos de lectura o escritura falla:

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

assertSucceeds(pr: Promise) => Promise

Devuelve una promesa que tiene éxito si la entrada tiene éxito y se rechaza si se rechaza la entrada.

Use esto para afirmar que la lectura o escritura de una base de datos es exitosa:

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

Almacenamiento en la nube

Almacenamiento en la nube

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

Use esto para crear una aplicación autenticada como un usuario específico para usar en las pruebas.

Devuelve una aplicación Firebase inicializada correspondiente al nombre del depósito de almacenamiento y la anulación de la variable de autenticación especificada en las opciones.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Use esto para crear una aplicación autenticada como administrador para configurar el estado de las pruebas.

Devuelve una aplicación Firebase de administrador inicializada correspondiente al nombre del depósito de almacenamiento especificado en las opciones. Esta aplicación pasa por alto las reglas de seguridad cuando lee y escribe en el depósito.

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

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

Use esto para establecer las reglas de su depósito de almacenamiento.

Envía reglas a depósitos de almacenamiento administrados localmente. Toma un objeto de opciones que especifica su "storageBucket" y sus "reglas" como cadenas.

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

apps() => [FirebaseApp]

Devuelve todas las aplicaciones de prueba y administración actualmente inicializadas.

Use esto para limpiar aplicaciones entre o después de las pruebas (tenga en cuenta que las aplicaciones inicializadas con escuchas activas evitan que JavaScript se cierre):

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

assertFails(pr: Promise) => Promise

Devuelve una promesa que se rechaza si la entrada se realiza correctamente y se realiza correctamente si se rechaza la entrada.

Use esto para afirmar que la lectura o escritura de un depósito de almacenamiento falla:

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

assertSucceeds(pr: Promise) => Promise

Devuelve una promesa que tiene éxito si la entrada tiene éxito y se rechaza si se rechaza la entrada.

Use esto para afirmar que la lectura o escritura de un depósito de almacenamiento se realiza correctamente:

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

API de biblioteca RUT para JS SDK v8

Seleccione un producto para ver los métodos que utiliza Firebase Test SDK para interactuar con el emulador.

Tienda de fuego en la nube

Tienda de fuego en la nube

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

Este método devuelve una aplicación de Firebase inicializada correspondiente al ID del proyecto y la variable de autenticación especificada en las opciones. Use esto para crear una aplicación autenticada como un usuario específico para usar en las pruebas.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

Este método devuelve una aplicación Firebase de administración inicializada. Esta aplicación pasa por alto las reglas de seguridad al realizar lecturas y escrituras. Use esto para crear una aplicación autenticada como administrador para establecer el estado de las pruebas.

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

apps() => [FirebaseApp] Este método devuelve todas las aplicaciones de prueba y administración actualmente inicializadas. Use esto para limpiar aplicaciones entre o después de las pruebas.

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

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

Este método envía reglas a una base de datos que se ejecuta localmente. Toma un objeto que especifica las reglas como una cadena. Utilice este método para establecer las reglas de su base de datos.

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

assertFails(pr: Promise) => Promise

Este método devuelve una promesa que se rechaza si la entrada tiene éxito o que tiene éxito si se rechaza la entrada. Use esto para confirmar si falla la lectura o escritura de una base de datos.

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

assertSucceeds(pr: Promise) => Promise

Este método devuelve una promesa que tiene éxito si la entrada tiene éxito y se rechaza si se rechaza la entrada. Use esto para confirmar si la lectura o escritura de una base de datos es exitosa.

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

clearFirestoreData({ projectId: string }) => Promise

Este método borra todos los datos asociados con un proyecto en particular en la instancia de Firestore que se ejecuta localmente. Utilice este método para limpiar después de las pruebas.

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

Base de datos en tiempo real

Base de datos en tiempo real

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

Use esto para crear una aplicación autenticada como un usuario específico para usar en las pruebas.

Devuelve una aplicación Firebase inicializada correspondiente al nombre de la base de datos y la anulación de la variable de autenticación especificada en las opciones.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Use esto para crear una aplicación autenticada como administrador para configurar el estado de las pruebas.

Devuelve una aplicación Firebase de administrador inicializada correspondiente al nombre de la base de datos especificado en las opciones. Esta aplicación pasa por alto las reglas de seguridad al leer y escribir en la base de datos.

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

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

Use esto para establecer las reglas de su base de datos.

Envía reglas a una base de datos que se ejecuta localmente. Toma un objeto de opciones que especifica su "nombre de la base de datos" y sus "reglas" como cadenas.

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

apps() => [FirebaseApp]

Devuelve todas las aplicaciones de prueba y administración actualmente inicializadas.

Use esto para limpiar aplicaciones entre o después de las pruebas (tenga en cuenta que las aplicaciones inicializadas con escuchas activas evitan que JavaScript se cierre):

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

assertFails(pr: Promise) => Promise

Devuelve una promesa que se rechaza si la entrada se realiza correctamente y se realiza correctamente si se rechaza la entrada.

Use esto para afirmar que una base de datos de lectura o escritura falla:

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

assertSucceeds(pr: Promise) => Promise

Devuelve una promesa que tiene éxito si la entrada tiene éxito y se rechaza si se rechaza la entrada.

Use esto para afirmar que la lectura o escritura de una base de datos es exitosa:

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

Almacenamiento en la nube

Almacenamiento en la nube

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

Use esto para crear una aplicación autenticada como un usuario específico para usar en las pruebas.

Devuelve una aplicación Firebase inicializada correspondiente al nombre del depósito de almacenamiento y la anulación de la variable de autenticación especificada en las opciones.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Use esto para crear una aplicación autenticada como administrador para configurar el estado de las pruebas.

Devuelve una aplicación Firebase de administrador inicializada correspondiente al nombre del depósito de almacenamiento especificado en las opciones. Esta aplicación pasa por alto las reglas de seguridad cuando lee y escribe en el depósito.

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

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

Use esto para establecer las reglas de su depósito de almacenamiento.

Envía reglas a depósitos de almacenamiento administrados localmente. Toma un objeto de opciones que especifica su "storageBucket" y sus "reglas" como cadenas.

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

apps() => [FirebaseApp]

Devuelve todas las aplicaciones de prueba y administración actualmente inicializadas.

Use esto para limpiar aplicaciones entre o después de las pruebas (tenga en cuenta que las aplicaciones inicializadas con escuchas activas evitan que JavaScript se cierre):

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

assertFails(pr: Promise) => Promise

Devuelve una promesa que se rechaza si la entrada se realiza correctamente y se realiza correctamente si se rechaza la entrada.

Use esto para afirmar que la lectura o escritura de un depósito de almacenamiento falla:

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

assertSucceeds(pr: Promise) => Promise

Devuelve una promesa que tiene éxito si la entrada tiene éxito y se rechaza si se rechaza la entrada.

Use esto para afirmar que la lectura o escritura de un depósito de almacenamiento se realiza correctamente:

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