Cloud Code Functions
Unit Testing pada Cloud Code Menggunakan Parse di Back4App
22 mnt
cara membuat unit test melalui fungsi cloud code mereka pendahuluan bagian ini akan memungkinkan anda untuk memeriksa operasi dan pengujian fungsi anda secara lokal menggunakan pustaka parse server test runner prasyarat untuk menyelesaikan tutorial ini, anda akan membutuhkan lingkungan lokal dengan node js terinstal untuk menerapkan unit test anda dapat mengikuti tutorial resmi nodejs untuk berhasil menginstal node js di terminal anda sebuah aplikasi yang dibuat di back4app ikuti tutorial membuat aplikasi baru untuk belajar cara membuat aplikasi di back4app back4app command line yang dikonfigurasi dengan proyek ikuti tutorial menyiapkan cloud code untuk belajar cara menyiapkan cloud code untuk proyek pertama tama, kita perlu membicarakan tentang unit test! ketika pengembang mulai menulis fungsi dengan berbagai niat dalam pikiran, satu poin utama yang terlihat di komunitas perangkat lunak adalah penerapan skenario imajiner untuk kode yang dibuat agar dapat diuji sangat penting untuk melakukan prosedur unit tests karena ini memungkinkan anda untuk menguji kode secara terpisah, yang memastikan bahwa kode utama anda tetap utuh dan tidak terganggu dan sekarang, bagaimana dengan contoh praktis yang sederhana? mari kita anggap bahwa anda perlu menulis sebuah fungsi untuk menunjukkan dalam kalimat lengkap, nama dari pekerja, posisi dan perusahaan kita perlu menulis fungsi untuk mendapatkan item input berikut perusahaan posisi nama pekerja langkah langkah untuk menyelesaikan tes sederhana di terminal anda, pertama tama, kita akan membuat direktori dan mengonfigurasi aplikasi tes anda (package json) terlebih dahulu, menggunakan perintah berikut petunjuk menggunakan npm init npm init perintah, anda akan dapat membuat file package json ini hanya mencakup item yang paling umum dan mencoba menebak default yang masuk akal karena itu, kita akan menyediakan dependensi yang diperlukan agar kode dapat berfungsi hasil dari βpackage jsonβ akan menjadi sesuatu seperti contoh di bawah ini { "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" "" } sekarang, mari kita buat file (index js) menggunakan perintah di bawah ini kami sekarang akan memasukkan kode di bawah ini ke dalam file yang telah dibuat sebelumnya, dan fungsi ini akan memasukkan contoh yang dapat mendemonstrasikan tes ini dengan kode 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 }; di nodejs, modul mengenkapsulasi kode terkait ke dalam satu unit kode, dan ketika anda menggunakan module exports , itu meningkatkan kode yang terenkapsulasi yang dapat digunakan di file lain mari kita uji 0/ akhirnya, anda dapat bekerja dengan terminal anda petunjuk menggunakan require() require() fungsi, anda dapat mengimpor dan mengekspor modul, dan dalam kasus di atas, kami menggunakan fungsi ini untuk memerlukan file di dalam aplikasi dan menggunakan parse, bisakah saya menguji fungsi saya? tentu saja, sebagai parameter uji, kami akan membuat backend untuk mengontrol informasi karyawan perusahaan mari kita strukturkan kelas sebagai parse user (referensi untuk karyawan) username, email, password (diperlukan) kami merekomendasikan anda untuk melihat dengan seksama panduan parse server untuk mendapatkan informasi lebih lanjut tentang properti user infoemployee posisi departemen shiftkerja userid (pointer) 1 pahami struktur akhir kami mari kita mulai! kami akan menggunakan panduan javascript parse server sebagai parameter untuk pengembangan fungsi kami pertama, setelah menyelesaikan pengaturan menggunakan antarmuka baris perintah (lihat prasyarat https //www back4app com/docs/cloud code functions/unit tests#content prerequisites ), kita akan memahami bagaimana ini akan bekerja dengan struktur akhir dari file file perhatian ketika anda mengunggah file ke cloud code anda, antarmuka baris perintah (lihat prasyarat ) akan mengabaikan file lain dan hanya mengunggah file yang ada di folder publik dan cloud 2 menulis fungsi kami setelah mengonfigurasi lingkungan untuk antarmuka baris perintah, kita akan menulis fungsi untuk membangun proses untuk mendaftarkan karyawan dan menyimpan informasi tambahan dengan merombak kode, di file main js, kita akan mengimpor fungsi fungsi ini ke dalam main, seperti 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)); ide ini adalah untuk memisahkan fungsi dari antarmuka cloud sehingga kita dapat mengujinya tanpa mengirim permintaan http secara tidak efisien ini akan sangat masuk akal saat kita membuat suite pengujian 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 menyiapkan lingkungan untuk menguji kode di atas! untuk suite pengujian kami, kami akan menggunakan jasmine , sebuah kerangka pengujian javascript yang sangat populer namun, kode kami sejauh ini sepenuhnya netral terhadap pengujian kami, jadi anda dapat menggunakan kerangka kerja atau platform apa pun yang anda pilih instal ketergantungan pengembangan mari kita instal jasmine secara global dan gunakan, dengan perintah di bawah ini 4 mengonfigurasi penguji parse server di folder dengan metode kami yang diterapkan di folder cloud proyek di back4app, kami akan membuat file baru di proyek kami di node js yang akan mengonfigurasi interaksi ini sekarang, kita akan mengonfigurasi file yang dibuat di atas dengan kode yang ditunjukkan di bawah ini 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 }); langkah terakhir adalah mengonfigurasi package json, menggunakan perintah $ npm init $ npm init di direktori root (file di bawah ini hanya contoh dengan modul yang diperlukan) 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 } dan sekarang, anda akan memeriksa bahwa kita mendekati struktur yang dijelaskan dalam langkah langkah sebelumnya https //www back4app com/docs/cloud code functions/unit tests#content structure ) 5 kembali ke terminal kami akan mulai mengonfigurasi pengujian lokal, untuk ini kami akan mengikuti perintah di bawah ini untuk mengatur secara programatis untuk tujuan pengujian setelah instalasi berhasil, anda dapat memeriksa pengujian unit anda secara lokal dengan perintah yang dijelaskan dan menerima hasilnya, seperti luar biasa, sudah siap! dengan panduan yang dijelaskan di atas, anda dapat bekerja dengan parse server test runner dan fungsi fungsi yang dikembangkan untuk cloud code ke back4app