Firestore
Al escribir código, probablemente verás que hay varias recomendaciones
a la hora de resolver una llamada a una función. Por ejemplo,
si escribimos deleteDoc
aparecerá una referencia a
@angular/fire/firestore
y otra a firebase/firestore
:
lo importante es mantenerse fiel a una de las dos librerías,
ya que hay diferencias sutiles que pueden hacer de tu vida un
infierno.
Por ejemplo, este código para borrar un equipo:
const q = query( this.equipoRef, where( "nombre", "==", nombre ));
let docList = getDocs( q )
.then( (docList) => {
docList.forEach( (docRef) => {
deleteDoc( docRef.ref );
})
})
No va a funcionar si deleteDoc
está importado de firebase/firestore
.
REGLA DE ORO: sugiero que todas las funciones las importaremos de
@angular/fire/firestore
.
async getEquipoByName( nombre : string ){
const q = query( this.equipoRef, where( "nombre", "==", nombre ) );
return getDocs(q);
}
async deleteEquipoByName( nombre : string ){
const q = query( this.equipoRef, where( "nombre", "==", nombre ));
let docList = getDocs( q )
.then( (docList) => {
docList.forEach( (docRef) => {
deleteDoc( docRef.ref );
})
})
}
pendiente
Las consultas sólo admiten estos operadores:
- < less than
- <= less than or equal to
- == equal to
- > greater than
- >= greater than or equal to
- != not equal to
- array-contains
- array-contains-any
- in
- not-in
Esto, a mi modo de ver, puede ser un problema a la hora de buscar
por nombre: "María" != "Maria"
(las marcas diacríticas son
significativas), "Maria" != "maria"
(las mayúsculas son
significativas).
Afortunadamente, podemos suponer que la codificación de los textos nos la da resuelta javascript.
No hace falta levantar la aplicación para ver si añadir un documento está funcionando.... es más, si construimos un test, en cualquier momento podemos volver al test y verificar si con un cambio no hemos roto nada.
fdescribe( 'PruebasDeMiServicio', () => {
let miServicio : TU-CLASE-DE-SERVICIO-AQUI;
beforeEach( () => {
TestBed.configureTestingModule({
imports: [ provideFirebaseApp(() => initializeApp(environment.firebaseConfig)),
provideFirestore(() => getFirestore()) ]
});
miServicio = TestBed.inject( TU-CLASE-DE-SERVICIO-AQUI );
});
});
Debe reemplazarse TU-CLASE-DE-SERVICIO-AQUI
por la clase que
se quiera testar. La variable miServicio
representará el
servicio bajo pruebas, puede ponerse el nombre que queramos.