test functions javascript firebase mocha firebase-authentication

javascript - functions - mocha js



Pruebas de la unidad Mocha para la aplicaciĆ³n Firebase (2)

Cuando dices, "Quiero usar la función signInWithEmailAndPassword en mi prueba de unidad de moca", entonces te digo "¿por qué?"

¿Estás tratando de ayudar al equipo de Firebase probando que su servicio de autenticación funciona? Es amable de su parte, pero si quiere probar SU aplicación, entonces NO debería llamar a Firebase para nada en una prueba unitaria. Lo que realmente desea verificar es que su aplicación maneje correctamente una respuesta similar a la que responde Firebase en el código que se ejecuta una vez que la respuesta vuelve.

Si me pidieran escribir una prueba para esto, usaría la biblioteca sinon con mocha y crearía un stub que llama a una función diferente que devuelve algunos datos en lugar de llamar a Firebase:

Esto ilustra la sintaxis para un ston sinon:

var stub = sinon.stub(object, "method", func);

Esto es lo que haría en tu ejemplo:

var stub = sinon.stub(FIREBASE_API_REF.auth(), "signInWithEmailAndPassword" , () => { // Simply return a JSON object that is similar to the normal response from Firebase return { name: "Jim", data: { something: "some stuff" } });

Utilizo firebase 3.3.0 y quiero usar la función signInWithEmailAndPassword en mi prueba de unidad mocha, pero obtengo error auth / network-request-failed

Unhandled rejection Error: A network error (such as timeout, interrupted connection or unreachable host) has occurred.

test.js

const FIREBASE_CONFIG = { apiKey: "AIzaSyDdA1POUWy9eid1AdBYuMdxch_k8ob7Qrg", authDomain: "my-app.firebaseapp.com", databaseURL: "https://my-app.firebaseio.com", storageBucket: "my-app.appspot.com", }; const FIREBASE_API_REF = firebase.initializeApp(FIREBASE_CONFIG); before(function (done) { promise = new Promise(function (resolve, reject) { return FIREBASE_API_REF.auth().signInWithEmailAndPassword(firstUserEmail, firstUserPassword) .then(function (userData) { firstUserId = userData.uid; resolve(userData); done(); }, function (error) { return reject(error); }) }); });

paquete.json

"scripts": { "test": "mocha --grep ./e2e.js --invert --compilers js:babel-register -R spec --ui bdd --timeout 7000" }


probablemente ya no necesites más, pero en lugar de crear un talón, acabo de utilizar spyOn y funcionó como un amuleto.