Cloud Code Functions
Einheitstests für Cloud-Code mit Jasmine einrichten
22 min
wie man einen unit test durch ihre cloud code funktionen erstellt einführung dieser abschnitt ermöglicht es ihnen, die funktionsweise und das testen ihrer funktionen lokal mit der bibliothek parse server test runner zu überprüfen voraussetzungen um dieses tutorial abzuschließen, benötigen sie eine lokale umgebung mit installiertem node js, um unit tests anzuwenden sie können dem offiziellen nodejs tutorial folgen, um node js erfolgreich in ihrem terminal zu installieren eine app, die bei back4app erstellt wurde befolgen sie das tutorial zum erstellen einer neuen app um zu lernen, wie man eine app bei back4app erstellt back4app befehlszeile, die mit dem projekt konfiguriert ist befolgen sie das tutorial zur einrichtung von cloud code um zu lernen, wie man cloud code für ein projekt einrichtet zuerst müssen wir über unit tests sprechen! wenn entwickler anfangen, eine funktion mit unterschiedlichen absichten zu schreiben, ist ein wichtiger punkt in der software community die anwendung von imaginären szenarien, um den erstellten code zu testen es ist notwendig, das verfahren für unit tests durchzuführen, da es ihnen ermöglicht, den code in teilen zu testen, was sicherstellt, dass ihr hauptcode intakt und unbeschädigt bleibt und jetzt, wie wäre es mit einem einfachen praktischen beispiel? angenommen, sie müssen eine funktion schreiben, um in einem vollständigen satz den namen des arbeitnehmers, die position und das unternehmen anzuzeigen wir müssen die funktion schreiben, um die folgenden eingabepunkte zu erhalten unternehmen position name des arbeitnehmers schritte zur durchführung des einfachen tests in ihrem terminal werden wir zunächst ein verzeichnis erstellen und ihre test app (package json) konfigurieren, indem wir den folgenden befehl verwenden hinweis mit dem npm init npm init befehl können sie die datei package json erstellen es deckt nur die häufigsten elemente ab und versucht, sinnvolle standardwerte zu erraten aus diesem grund stellen wir die notwendigen abhängigkeiten zur verfügung, damit der code funktioniert das ergebnis von „package json“ wird etwa so aussehen wie das folgende beispiel { "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" "" } jetzt erstellen wir die datei (index js) mit dem folgenden befehl wir werden jetzt den folgenden code in die zuvor erstellte datei einfügen, und die funktion wird ein beispiel einfügen, das diesen test mit dem code demonstrieren kann 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 }; in nodejs kapselt das modul den verwandten code in eine einzelne codeeinheit, und wenn du module exports , erhöht es den gekapselten code, der in anderen dateien verwendet werden kann lass uns 0 testen/ schließlich kannst du mit deinem terminal arbeiten hinweis mit der require() require() funktion kannst du module importieren und exportieren, und im obigen fall verwenden wir diese funktion, um eine datei innerhalb einer anwendung zu verlangen und kann ich meine funktion mit parse testen? natürlich, als testparameter werden wir ein backend erstellen, um die informationen der mitarbeiter eines unternehmens zu steuern lass uns die klassen wie folgt strukturieren parse user (referenz für mitarbeiter) benutzername, e mail, passwort (erforderlich) wir empfehlen dir, einen detaillierten blick auf die parse server anleitung zu werfen, um weitere informationen über die eigenschaften von benutzern zu erhalten infoemployee position abteilung arbeitszeit benutzer id (zeiger) 1 verstehen sie unsere endgültige struktur lass uns anfangen! wir werden den parse server javascript leitfaden als parameter für die entwicklung unserer funktionen verwenden zunächst, nachdem wir die einrichtung mit der befehlszeilenschnittstelle abgeschlossen haben (siehe voraussetzungen https //www back4app com/docs/cloud code functions/unit tests#content prerequisites ), werden wir verstehen, wie es mit der endgültigen struktur aus den dateien funktionieren wird hinweis wenn sie die dateien in ihren cloud code hochladen, ignoriert die befehlszeilenschnittstelle (siehe voraussetzungen ) die anderen dateien und lädt nur die hoch, die sich im öffentlichen und cloud ordner befinden 2 schreiben unserer funktion nachdem wir die umgebung für die befehlszeilenschnittstelle konfiguriert haben, werden wir die funktion schreiben, um den prozess zur registrierung des mitarbeiters und zum speichern der zusätzlichen informationen zu erstellen durch refactoring des codes in der main js datei werden wir diese funktionen in main importieren, wie 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)); die idee ist, die funktionen von der cloud schnittstelle zu entkoppeln, damit wir sie testen können, ohne ineffizient http anfragen zu senden das wird viel sinn machen, während wir die testsuite erstellen 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 die umgebung einrichten, um den obigen code zu testen! für unsere testsuite werden wir jasmine , ein sehr beliebtes javascript testframework, verwenden unser code ist jedoch bisher völlig unabhängig von unseren tests, sodass sie jedes beliebige framework oder jede plattform verwenden können, die sie bevorzugen installieren sie die entwicklungsabhängigkeiten lassen sie uns jasmine global installieren und mit den folgenden befehlen verwenden 4 konfigurieren des parse server test runners im ordner mit unseren methoden, die im projekt cloud ordner in back4app implementiert sind, werden wir neue dateien in unserem projekt auf node js erstellen, die diese interaktion konfigurieren jetzt werden wir die oben erstellten dateien mit den unten gezeigten codes konfigurieren 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 }); der letzte schritt besteht darin, die package json zu konfigurieren, indem sie den befehl verwenden $ npm init $ npm init im stammverzeichnis (die datei unten ist nur ein beispiel mit den erforderlichen modulen) 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 } und jetzt werden sie überprüfen, dass wir uns der struktur nähern, die in diesen vorherigen https //www back4app com/docs/cloud code functions/unit tests#content structure schritten ) 5 zurück zum terminal wir werden mit der konfiguration des lokalen tests beginnen dazu folgen wir dem untenstehenden befehl, um den code programmgesteuert für testzwecke einzurichten nach der erfolgreichen installation können sie ihren unit test lokal mit dem beschriebenen befehl überprüfen und das ergebnis erhalten, wie zum beispiel wunderbar, es ist bereit! mit dem oben beschriebenen leitfaden können sie mit dem parse server test runner und ihren für den cloud code entwickelten funktionen für back4app arbeiten