Cloud Code Functions
Tests unitaires pour les fonctions Cloud Code sur Back4App
22 min
comment créer un test unitaire via leurs fonctions cloud code introduction cette section vous permettra de vérifier le fonctionnement et le test de vos fonctions localement en utilisant la bibliothèque parse server test runner prérequis pour compléter ce tutoriel, vous aurez besoin de un environnement local avec node js installé pour appliquer des tests unitaires vous pouvez suivre le tutoriel officiel de nodejs pour installer avec succès node js dans votre terminal une application créée sur back4app suivez le tutoriel créer une nouvelle application pour apprendre à créer une application sur back4app back4app command line configuré avec le projet suivez le tutoriel de configuration du cloud code pour apprendre à configurer le code cloud pour un projet tout d'abord, nous devons parler des tests unitaires ! lorsque les développeurs commencent à écrire une fonction avec différentes intentions en tête, un point majeur évident dans la communauté des logiciels est l'application de scénarios imaginaires pour que le code créé soit testé il est nécessaire d'effectuer la procédure de tests unitaires car elle vous permet de tester le code par parties, ce qui garantit que votre code principal reste intact et non compromis et maintenant, que diriez vous d'un exemple pratique simple ? supposons que vous devez écrire une fonction pour afficher dans une phrase complète, le nom du travailleur, le poste et l'entreprise nous devrons écrire la fonction pour obtenir les éléments d'entrée suivants entreprise poste nom du travailleur étapes pour compléter le test simple dans votre terminal, au départ, nous allons créer un répertoire et configurer votre application de test (package json) d'abord, en utilisant la commande suivante indice en utilisant le npm init npm init commande, vous pourrez créer le fichier package json cela ne couvre que les éléments les plus courants et essaie de deviner des valeurs par défaut sensées pour cette raison, nous mettrons à disposition les dépendances nécessaires au bon fonctionnement du code le résultat de “package json” sera quelque chose comme l'exemple ci dessous { "name" "yourfoldername", "version" "1 0 0", "description" "just a unit test with using a simple function ", "main" "index js", "scripts" { "test" "echo \\"error no test specified\\" && exit 1" }, "repository" { "type" "git", "url" "" }, "author" "your name", "license" "isc", "bugs" { "url" "{url}/issues" }, "homepage" "" } maintenant, créons le fichier (index js) en utilisant la commande ci dessous nous allons maintenant insérer le code ci dessous dans le fichier précédemment créé, et la fonction insérera un exemple qui peut démontrer ce test avec le code 1 // index js 2 module exports = function(name, position, company) { 3 let sentence = "hi, " + name + "! you are " + position + " in " + company + " company "; 4 return sentence; 5 }; dans nodejs, le module encapsule le code lié en une seule unité de code, et lorsque vous utilisez module exports , cela augmente le code encapsulé qui peut être utilisé dans d'autres fichiers testons 0/ enfin, vous pouvez travailler avec votre terminal indice en utilisant la require() require() fonction, vous pouvez importer et exporter des modules, et dans le cas ci dessus, nous utilisons cette fonction pour exiger un fichier à l'intérieur d'une application et en utilisant parse, puis je tester ma fonction ? bien sûr, comme paramètre de test, nous allons créer un backend pour contrôler les informations des employés d'une entreprise structurons les classes comme suit parse user (référence pour les employés) nom d'utilisateur, email, mot de passe (obligatoire) nous vous recommandons de consulter en détail le parse server guide afin d'obtenir plus d'informations sur les propriétés des utilisateurs infoemployee position département travailshift userid (pointeur) 1 comprendre notre structure finale commençons ! nous allons utiliser le guide javascript de parse server comme paramètre pour le développement de nos fonctions tout d'abord, après avoir terminé la configuration en utilisant l'interface de ligne de commande (voir les prérequis https //www back4app com/docs/cloud code functions/unit tests#content prerequisites ), nous allons comprendre comment cela fonctionnera avec la structure finale des fichiers remarque lorsque vous téléchargez les fichiers dans votre cloud code, l'interface de ligne de commande (voir prérequis ) ignorera les autres fichiers et ne téléchargera que ceux qui se trouvent dans le dossier public et cloud 2 écrire notre fonction après avoir configuré l'environnement pour l'interface de ligne de commande, nous allons écrire la fonction pour construire le processus d'enregistrement de l'employé et sauvegarder les informations supplémentaires en refactorisant le code, dans le fichier main js, nous allons importer ces fonctions dans main, comme 1 //in 1cloud/main js 2 3 var cloudfunctions = require(" /functions"); 4 5 / it's necessary to insert the parse instance in our code, 6 because at local context not is referenced / 7 8 parse cloud define("registeruser", cloudfunctions registeruser(parse)); 9 10 parse cloud beforesave("infoemployee", infoemployee infoemployee(parse)); l'idée est de découpler les fonctions de l'interface cloud afin que nous puissions les tester sans envoyer de requêtes http de manière inefficace cela aura beaucoup de sens lorsque nous créerons la suite de tests parse server 3 x 1 //in cloud/functions js 2 3 module exports registeruser = function(parse){ 4 return async(request) =>{ 5 let params = request params; //parameters received 6 let infoemployee = parse object extend("infoemployee"); //store information 7 8 let usercreated = new parse user({ 9 "email" params email, 10 "username" params username, 11 "password" params password 12 }) 13 14 //save relation 15 try { 16 let result = await usercreated save(); 17 18 let information = new infoemployee({ 19 "position" params position, 20 "department" params department, 21 "workshift" params shift, 22 "user" result 23 }); 24 25 return information save(); 26 } catch (e) { 27 return e message; 28 } 29 } 30 } 31 32 module exports infoemployee = function(parse){ 33 return async (request) =>{ 34 let req = request object; 35 36 if (!req get("position") || !req get("department") || !req get("workshift")) { 37 throw new error("missing params! the required parameters are position, department workshift"); 38 } else { 39 return; 40 } 41 } 42 } parse server 2 x 1 //in cloud/functions js 2 3 module exports registeruser = function(parse){ 4 return function (request, response){ 5 var params = request params; //parameters received 6 7 var infoemployee = parse object extend("infoemployee"); //store information 8 9 var usercreated = new parse user({ 10 "email" params email, 11 "username" params username, 12 "password" params password 13 }) 14 15 //save relation 16 usercreated save() then((updateduser) => { 17 var information = new infoemployee({ 18 "position" params position, 19 "department" params department, 20 "workshift" params shift, 21 "user" updateduser 22 }); 23 return information save(); 24 }) then((info) => response success(info)) 25 catch((e) => { 26 response error(e message); 27 }) 28 } 29 } 30 31 module exports infoemployee = function(parse){ 32 return function (request, response){ 33 var req = request object; 34 35 if (!req get("position") || !req get("department") || !req get("workshift")) { 36 response error("missing params! the required parameters are position, department workshift"); 37 } else { 38 response success(); 39 } 40 } 41 } 3 configuration de l'environnement pour tester le code ci dessus ! pour notre suite de tests, nous allons utiliser jasmine , un framework de test javascript très populaire cependant, notre code jusqu'à présent est complètement agnostique de nos tests, donc vous pouvez utiliser n'importe quel framework ou plateforme que vous préférez installer les dépendances de développement installons jasmine globalement et utilisons le, avec les commandes ci dessous 4 configurer le parse server test runner dans le dossier avec nos méthodes mises en œuvre dans le dossier cloud du projet dans back4app, nous allons créer de nouveaux fichiers sur notre projet node js qui configureront cette interaction maintenant, nous allons configurer les fichiers créés ci dessus avec les codes montrés ci dessous index js 1 const promise = require('bluebird'); 2 const express = require('express'); 3 const http = require('http'); 4 const {mongoclient} = require('mongodb'); 5 const {parseserver} = require('parse server'); 6 7 const mongodbrunnerstart = require('mongodb runner/mocha/before') bind({ 8 timeout() { 9 }, 10 slow() { 11 }, 12 }); 13 const mongodbrunnerstop = require('mongodb runner/mocha/after'); 14 15 const startdb = () => ( 16 new promise((done, reject) => { 17 done fail = reject; 18 mongodbrunnerstart(done); 19 }) 20 ); 21 22 const stopdb = () => ( 23 new promise((done, reject) => { 24 done fail = reject; 25 mongodbrunnerstop(done); 26 }) 27 ); 28 29 const connectdb = (databaseuri) => new promise((resolve, reject) => { 30 mongoclient connect(databaseuri, (err, db) => { 31 if (err) { 32 reject(err); 33 } else { 34 resolve(db); 35 } 36 }); 37 }); 38 39 let parseserverstate = {}; 40 41 const dropdb = () => { 42 const {mongoconnection} = parseserverstate; 43 return mongoconnection dropdatabaseasync(); 44 }; 45 46 / 47 starts the parseserver idropdatabaseasyncnstance 48 @param {object} parseserveroptions used for creating the `parseserver` 49 @return {promise} runner state 50 / 51 function startparseserver(parseserveroptions = {}) { 52 const mongodbport = process env mongodb port || 27017; 53 const { 54 databasename = 'parse test', 55 databaseuri = 'mongodb //localhost ${mongodbport}/${databasename}', 56 masterkey = 'test', 57 javascriptkey = 'test', 58 appid = 'test', 59 60 port = 30001, 61 mountpath = '/1', 62 serverurl = 'http //localhost ${port}${mountpath}', 63 } = parseserveroptions; 64 65 return startdb() 66 then(() => connectdb(databaseuri)) 67 then((mongoconnection) => { 68 parseserveroptions = object assign({ 69 masterkey, javascriptkey, appid, 70 serverurl, 71 databaseuri, 72 silent process env verbose !== '1', 73 }, parseserveroptions); 74 const app = express(); 75 const parseserver = new parseserver(parseserveroptions); 76 77 app use(mountpath, parseserver); 78 79 const httpserver = http createserver(app); 80 81 promise promisifyall(httpserver); 82 promise promisifyall(mongoconnection); 83 84 return httpserver listenasync(port) 85 then(() => object assign(parseserverstate, { 86 parseserver, 87 httpserver, 88 mongoconnection, 89 expressapp app, 90 parseserveroptions, 91 })); 92 }); 93 } 94 95 / 96 stops the parseserver instance 97 @return {promise} 98 / 99 function stopparseserver() { 100 const {httpserver} = parseserverstate; 101 return httpserver closeasync() 102 then(stopdb) 103 then(() => parseserverstate = {}); 104 } 105 106 module exports = { 107 dropdb, 108 startparseserver, 109 stopparseserver, 110 parseserverstate, 111 }; jasmine js 1 const { startparseserver, stopparseserver, dropdb } = require('parse server test runner'); 2 3 describe('registeruser', () => { 4 beforeall((done) => { 5 const appid = 'test'; 6 const masterkey = 'test'; 7 const javascriptkey = 'test'; 8 9 startparseserver({ appid, masterkey, javascriptkey }) 10 then(() => { 11 parse initialize(appid, masterkey, javascriptkey); 12 parse serverurl = 'http //localhost 30001/1'; 13 }) 14 then(done) catch(done fail); 15 }, 300 60 2); 16 17 afterall((done) => { 18 stopparseserver() 19 then(done) catch(done fail); 20 }); 21 22 beforeeach((done) => { 23 dropdb() 24 then(done) catch(done fail); 25 }); 26 27 it('should work', (done) => { 28 const q = new parse query(' user') 29 q limit(5) 30 find({ usemasterkey true }) 31 then(console log) 32 then(done) catch(done fail); 33 }); 34 }); la dernière étape consiste à configurer le package json, en utilisant la commande $ npm init $ npm init dans le répertoire racine (le fichier ci dessous est juste un exemple avec les modules requis) 1 { 2 "name" "back4approject", 3 "version" "1 0 0", 4 "description" "back4app guide using for reference the parse server test runner", 5 "main" "index js", 6 "engines" { 7 "node" ">=6" 8 }, 9 "repository" { 10 "type" "", 11 "url" "" 12 }, 13 "keywords" \[ 14 "parse", 15 "parse server", 16 "testing", 17 "tests" 18 ], 19 "author" "", 20 "license" "isc", 21 "dependencies" { 22 "bluebird" "^3 5 0", 23 "express" "latest", 24 "mongodb" "^2 2 30", 25 "mongodb runner" "^3 5 0", 26 "parse" "^1 10 0", 27 "parse server" "^2 5 3", 28 "parse server test runner" "^1 0 0" 29 } 30 } et maintenant, vous allez vérifier que nous approchons la structure décrite dans ces précédents https //www back4app com/docs/cloud code functions/unit tests#content structure étapes ) 5 retour au terminal nous allons commencer à configurer les tests locaux, pour cela nous suivrons la commande ci dessous pour configurer le code de manière programmatique à des fins de test après l'installation réussie, vous pouvez vérifier votre test unitaire localement avec la commande décrite et recevoir le résultat, tel que merveilleux, c'est prêt ! avec le guide décrit ci dessus, vous pouvez travailler avec le parse server test runner et vos fonctions développées pour le cloud code à back4app