Am trecut acum un pic de gust de funcționare a unor documente, dar vreau să subliniez
o mică problemă pe care am introdus-o acum în cererea noastră.
Problema nu este cel mai bun cuvânt, dar ceva care nu are sens.
Voi deschide modelul meu de utilizator.
Deci aici este.
Știi că găsesc schema mea de utilizator și derulez puțin în jos pentru a-mi înregistra postările și pentru a posta proprietățile.
Deci, numărul postărilor este acum numărul și se presupune că reflectă numărul de postări pe care le are un utilizator.
Așa că avem lista de postări aici.
Veți observa că este într-adevăr până la noi dezvoltatorul să țină evidența atât a numărului de posturi, cât și a postărilor.
Deci, chiar dacă în toate fișierele noastre de testare sub document pe care le-am adăugat în lista de cunoștințe, apose
blah blah blah.
În orice moment în timp, când adaug un alt post aici, dacă am făcut referire la proprietatea
numărului de posturi undeva aici, șansele sunt că voi obține rezultatul corect incorect, deoarece nu măresc în mod manual
numărul postărilor la orice moment în timp.
Deci, codul nostru nu funcționează prea bine în legătură cu valoarea numărului de postări la numărul de postări care
sunt efectiv stocate în interiorul utilizatorului.
Poate că poate că trebuie să găsim o soluție mai bună la acest lucru.
Deci, pe măsură ce utilizați o diagramă a ceea ce arată modelul nostru de utilizator acum, știți că avem
un nume de posturi de proprietate și postări.
Deci, în această diagramă am putea să știți trei postări diferite în interiorul aici,
dar postul este total separat și nu este legat de numărul real de posturi din interiorul aici.
Deci, este foarte frumos să ai o soluție mai bună aici, în cazul în care această valoare a numărului de posturi.
Un fel de privire la numărul de postări și apoi se întoarce.
Cu toate acestea, multe posturi care se află în interiorul acestei matrice pot face acest lucru.
Vom folosi o idee numită Tipuri virtuale în interiorul mongoose unui tip virtual.
Este un câmp pe un model.
La fel ca și numărul de postări din cazul nostru, care nu se rezumă la baza noastră de date Mongo D-B.
Deci, ceea ce sugerez este că, mai degrabă decât stocarea atât a postului, cât și a numărului de posturi din
interiorul Mongo, în loc să desemnam sau să definim doar proprietatea post count de pe serverul nostru unde codul mongooses rulează,
atunci când încercăm să accesăm această proprietate de numărare a postului vom calcula numărul de postări pe care
le avem doar uităm la lungimea acestui matrice și apoi vom returna acest număr.
Deci, termenul de tip virtual sau proprietate virtuală sau câmp virtual se referă la orice tip de proprietate pe care o avem
pe modelul nostru, care nu se salvează de fapt în baza noastră de date Mongo D-B.
Ori de câte ori vă gândiți la o proprietate pe un model care este ca un derivat sau produsul a
două sau mai multe alte proprietăți.
O soluție fantastică este să începeți să vă gândiți la tipurile virtuale, astfel încât suntem pe nedefinit.
Un caz clasic de utilizare a tipurilor virtuale chiar acum, deoarece numărul nostru de posturi este foarte strâns
cuplat la proprietatea Postului.
S-ar putea spune că este ca un derivat al proprietății postului sau este un câmp
calculat sau proprietatea Post.
OK, să vedem cum funcționează acest lucru.
Vom urmări modelul similar pe care l-am parcurs până acum.
Prin crearea unui nou fișier de testare și în interiorul noului fișier de testare se va scrie un pic de cod
pentru a afla modul în care se comportă exact aceste tipuri virtuale.
Deci, în directorul meu de testare voi face un nou dosar.
Voi numi acest test tip virtual.
J. S ..
Și apoi, în interiorul nostru, vom plasa imediat un pic de boilerplate de testare.
Așa că spune că Konst susține că este necesar să afirmi că utilizatorul are nevoie de utilizator sursă
și apoi vom descrie tipurile virtuale.
Acum pentru primul nostru test.
Să scriem ceva în jurul valorii de a ne asigura că putem prelua cântecul corect post count
într-un test de culoare ceva de genul Cum despre numărul de posturi returnează numărul de posturi și apoi, ca de obicei, mă aștept cu siguranta ca acesta să fie un test de asincron,
așa că voi adăuga în mea făcut suna inapoi.
O.K.
Așa că avem o idee despre cum ar trebui să funcționeze acest lucru.
Sa incercam.
Un fel de răsturnare a ceea ce facem de obicei în toate exemplele noastre, până în momentul în care vom
scrie prima dată despre implementare și apoi vom scrie într-un test de data asta să scriem mai întâi testul și apoi vom merge și
vom actualiza codul și vom face testul trece.
Deci, vom face un pic mai mult de o abordare de dezvoltare condusă de test aici.
Deci, numărul de postări returnează numărul de postări test pe care le vom scrie în interiorul dacă veți funcționa în mod esențial
așa cum vă așteptați ca vom defini un utilizator.
Îi vom salva, îl vom scoate din baza de date și apoi vom examina proprietatea numărului de postări și cu toții
ne așteptăm ca aceasta să fie în principiu valoarea corectă.
O.K.
Deci voi crea un nou model de utilizator și Joe va da un utilizator pe care îl voi da numele lui
Joe și apoi îi voi da un post.
Așa că vreau să spun că postul va fi o matrice cu un post din interiorul acestuia.
Deci, în acest moment cu codul ca nu am făcut de fapt, nici o modificare a modelului meu de utilizator sau
a schemei de utilizator până acum, dacă am spus că Joe nu posta conteaza.
Mă așteptam să mă întorc ca zero sau nu sau nedefinit.
Știți că în realitate nu am atins această proprietate.
Nu am atins numărul postărilor.
Asa ca ma astept ca acest lucru sa fie ceva de genul unei valori nedefinite. Dar am definit
un post in colectia posta din interiorul aici.
Deci, dacă modelul nostru se comporta în modul corect, m-aș aștepta cu certitudine la numărul de posturi.
Chiar așa e ceea ce vrem să fie.
Dar în acest moment post post. com este cu siguranță Cine știe ce.
Să o salvăm pe Joe.
Atunci, scoateți-le din colecțiile noastre de utilizatori sau spuneți-i că găsiți numele lui Joe și apoi ne vom uita la utilizatorul
care a fost preluat și vreau să mă uit în mod special la proprietatea lui Joe.
Deci spun că am căutat postul lui Joe.
Deci, ce credeți că ar trebui să fie postul.
Ei bine, cu siguranță știm cum ar fi probabil acum și ce vrem să fie.
Așa că vom scrie testul pentru a afirma ce vrea să fie numărul de postări.
Cu siguranță ne dorim.
Postul păstrează numărarea numărului de postări.
Se pare că vă faceți una pentru că avem un post în matricea postului, astfel încât vom afirma că numărul postărilor
este de 1 și apelul ultimul apelant a fost efectuat.
OK, acest lucru arata cu siguranta ca un test rezonabil, deoarece am pus totul aici in acest moment.
S-ar putea să te întrebi hei Stephen de ce suntem chiar salvând acest model.
Cum ar fi scopul.
Ei bine, aici nu este un scop.
Știți că am putea încerca la fel de bine cum funcționează acest lucru, fără a-l salva
în baza de date.
Îl salvez în baza de date și o preiau pentru a vă oferi un exemplu foarte realist despre modul în
care probabil veți lucra cu aceste modele în sălbăticie.
Deci este mult mai comună sau ar trebui să spun mult mai mult.
Dar este foarte probabil ca la un moment dat să creați un model de un anumit tip, să îl salvați
în baza de date salvând în baza de date.
Acolo te duci.
Apoi, poate ca la 5 zile mai târziu sau ceva de genul asta, veți extrage modelul și apoi veți încerca să
accesați anumite proprietăți virtuale pe acesta.
Deci, în scopul testului nostru, nu trebuie să salvăm acest lucru și să preluăm baza de date.
Doar fac acest lucru pentru a vă oferi un exemplu foarte realist despre cum funcționează acest lucru.
OK, așa că am scris un test despre modul în care vrem să se comporte postările.
Dacă verificăm terminalul nostru.
Se pare că am obținut un test care să-i pese.
Deci, un lucru nu funcționează sau nu trece.
În mod clar acest lucru nu funcționează așa cum ne așteptăm chiar acum.
Să continuăm în secțiunea următoare și să încercăm să trecem testul prin definirea unui tip virtual pe schema
noastră de utilizator.