Top Banner
Vos fixtures en 30 sec avec loopback- fixtures Samy Ghribi Meetup Loopback #2 - 28 juin 2016
32

Vos fixtures en 30 sec avec loopback fixtures

Feb 11, 2017

Download

Internet

Samy GHRIBI
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Vos fixtures en 30 sec avec loopback fixtures

Vos fixtures en 30 sec avec

loopback-fixtures

Samy GhribiMeetup Loopback #2 - 28 juin 2016

Page 2: Vos fixtures en 30 sec avec loopback fixtures

loopback.getCurrentContext().get(‘CurrentUser’)

Samy Ghribi (GitHub : @sghribi)Je suis développeur à Theodo

Je viens du monde du PHP, Symfony2 (soyez gentils 😃)

J’ai découvert Loopback le mois dernier (idem 😃)

Page 3: Vos fixtures en 30 sec avec loopback fixtures

Je veux pouvoir visualiser l’historique des investissements

sur les 5 dernières années

ClientÇa marche !

On va te faire un joli graphique:)

Moi

Page 4: Vos fixtures en 30 sec avec loopback fixtures
Page 5: Vos fixtures en 30 sec avec loopback fixtures

Tada !

Page 6: Vos fixtures en 30 sec avec loopback fixtures

ClientMoi

Page 7: Vos fixtures en 30 sec avec loopback fixtures

Mon problème

● Jeux de données pour tester

● Jeux de données initiales nécessaires au fonctionnement de mon application

● Données aléatoires ?● Simple et rapide !

Page 8: Vos fixtures en 30 sec avec loopback fixtures

Prenons un exemple !

Page 9: Vos fixtures en 30 sec avec loopback fixtures

Modèle "User”

NomEmailDate de naissance

{ "name": "User", "properties": { "name": { "type": "string" }, "email": { "type": "string" }, "birthDate": { "type": "date" } }}

Page 10: Vos fixtures en 30 sec avec loopback fixtures

La méthode "à la main”var users = [{

"name”: "Jean Michel”,"email”:

"[email protected]”,"birthDate”: new Date(1990,

1, 1)},{

"name”: "Anne Delarue”,"email”:

"[email protected]”,"birthDate”: new Date(1985,

3, 1)}, // Etc ...];app.models.User.create(users, done);

Sympa, mais pas plus de 10...

et fastidieuse

Page 11: Vos fixtures en 30 sec avec loopback fixtures

La méthode "programmatique”var users = [];

for (var i = 1; i <= 10; i++) { users.push({ "name": "User n°"+i, "email": "email"+i+"@gmail.com", "birthDate": new Date(1990, i, 1) });}

app.models.User.create(users, done);

Page 12: Vos fixtures en 30 sec avec loopback fixtures

La méthode "programmatique”name email birthdate

User n°1 [email protected] ‘1990-01-01’

User n°2 [email protected] ‘1990-02-01’

User n°3 [email protected] ‘1990-03-01’

User n°4 [email protected] ‘1990-04-01’

… … …

var users = [];

for (var i = 1; i <= 10; i++) { users.push({ "name": "User n°"+i, "email": "email"+i+"@gmail.com", "birthDate": new Date(1990, i, 1) });}

Tant que ça reste simple, ça va

Page 13: Vos fixtures en 30 sec avec loopback fixtures

Et maintenant avec deux modèles ?

{ "name": "User", "properties": { // name, email, birthDate }, "relations": { "group": { "type": "belongsTo", "model": "Group", "foreignKey": "groupId" } }}

“User”

{ "name": "Group", "properties": { "name": { "type": "string" } }, "relations": { "users": { "type": "hasMany", "model": "User", "foreignKey": "groupId" } }}

“Group”

Page 14: Vos fixtures en 30 sec avec loopback fixtures

Et maintenant avec deux modèles ?var users = [];var groups = [];

for (var i = 1; i <= 10; i++) { users.push({ "name": "User n°"+i, "email": "email"+i+"@gmail.com", "birthDate": new Date(1990, i, 1) });}

for (var i = 0; i < 5; i++) { groups.push({ “name”: “Group”+(2*i), “users”: [users[2*i], users[2*i+1]] });}

Page 15: Vos fixtures en 30 sec avec loopback fixtures

Et maintenant avec deux modèles ?var users = [];var groups = [];

for (var i = 1; i <= 10; i++) { users.push({ "name": "User n°"+i, "email": "email"+i+"@gmail.com", "birthDate": new Date(1990, i, 1) });}

for (var i = 0; i < 5; i++) { groups.push({ “name”: “Group”+(2*i), “users”: [users[2*i], users[2*i+1]] });}

Ça commence à devenir le bazar !

Page 16: Vos fixtures en 30 sec avec loopback fixtures

loopback-fixtures

Page 17: Vos fixtures en 30 sec avec loopback fixtures

“loopback-fixtures”, késako ?

Composant loopbackModule NPMInspiré de “nelmio/alice” de PHP

Page 18: Vos fixtures en 30 sec avec loopback fixtures

Comment on l’utilise ?

npm install loopback-fixtures --save

{ // Some other stuff... "loopback-fixtures": {}} server/component-

config.json

1.Installation module

2.Activation du composant

Group: group{1..3}: name: "Groupe n°{@} depuis les fixtures"

User: user{1..10}: name: "User n°{@} : {{name.lastName}}" groupId: @group.* email: "{{internet.email}}" birthDate: "{{date.past}}"

fixture/data/data.yml

3.Définition de vos fixtures

Page 19: Vos fixtures en 30 sec avec loopback fixtures

Chargement de données

Group: group{1..3}: name: "Groupe n°{@} depuis les fixtures"

User: user{1..10}: name: "User n°{@} : {{name.lastName}}" groupId: @group.* email: "{{internet.email}}" birthDate: "{{date.past}}"

fixture/data/data.yml

Se base sur le modèle de données Loopback

Fichier YAML

Page 20: Vos fixtures en 30 sec avec loopback fixtures

Chargement de données

User: user_alice: name: "Alice" email: "[email protected]" birthDate: "1993-06-24"

user_bob: name: "Bob" email: "[email protected]" birthDate: "1993-06-24"

fixture/data/data.yml

Nom du modèle

Identifiant unique

Données

Page 21: Vos fixtures en 30 sec avec loopback fixtures

Gammes d’objetsUser: user_{1..500}: name: "User n°{@}" email: "user{@}@gmail.com" birthDate: "1993-06-24"

fixture/data/data.yml

identifier{1...n} : réplique n fois la ligne"aaa{@}bbb" : {@} renvoie l’indice de l’itération

courante

Page 22: Vos fixtures en 30 sec avec loopback fixtures

Gammes d’objets

User: user_{1..500}: name: "User n°{@}" email: "user{@}@gmail.com" birthDate: "1993-06-24"

fixture/data/data.yml

User: user_1: name: "User n°1" email: "[email protected]" birthDate: "1993-06-24"

user_2: name: "User n°2" email: "[email protected]" birthDate: "1993-06-24"

# … 500 fois au total

fixture/data/data.yml

Page 23: Vos fixtures en 30 sec avec loopback fixtures

Données aléatoires

User: user_{1..500}: name: "{{name.firstName}} {{name.lastName}}" email: "{{internet.email}}" birthDate: "{{date.past}}"

fixture/data/data.yml

Intégration de faker.js

Page 24: Vos fixtures en 30 sec avec loopback fixtures

En dernier recours…

User: user_samy: name: "Jean Michel" weight: "(function() { return Math.random()*100;})()" fixture/data/data.yml

Vraiment en dernier recours !

Page 25: Vos fixtures en 30 sec avec loopback fixtures

Références entre modèles (simple)Group: group_jaune: name: "Les jaunes"

User: samy: name: "Samy" groupId: @group_jaune

fixture/data/data.yml

group_jaune doit être défini avant son utilisation

Page 26: Vos fixtures en 30 sec avec loopback fixtures

Références entre modèles (wildcard)Group: group_jaune: name: "Les jaunes" group_bleu: name: "Les bleus" les_rouges: name: "Les rouges"

User: samy: name: "Samy" groupId: @group_.*

fixture/data/data.yml

Sélection aléatoire parmi les références qui matchent

Exemple : @group_.*➔ group_jaune match OK

➔ group_bleu match OK

➔ les_rouges match KO

⇒ group_jaune ou group_bleu

Page 27: Vos fixtures en 30 sec avec loopback fixtures

Bilan

Group: group{1..8}: name: "Groupe n°{@} depuis les fixtures"

User: user{1..100}: name: "User n°{@} : {{name.lastName}}" groupId: @group.* email: "{{internet.email}}" birthDate: "{{date.past}}"

fixture/data/data.yml

Page 28: Vos fixtures en 30 sec avec loopback fixtures

Usages

{ // other stuff... "loopback-fixtures": { "autoLoad": true }}

server/component-config.json

Chargement au démarrage

app.loadFixtures()

Depuis Loopback (promesse)

./node_modules/loopback-fixtures/load-fixtures.js

Depuis le shell

Autres cas d’usages : migrations, tests fonctionnels [, etc]

Page 29: Vos fixtures en 30 sec avec loopback fixtures

Quelques options

"autoLoad": true/false : chargement au démarrage de l’appli ?

"append": true/false : ajoute et/ou efface les données ?

"fixturePath": "/fixtures/data" : dossier de fixtures

Page 30: Vos fixtures en 30 sec avec loopback fixtures

ClientMoi

Page 31: Vos fixtures en 30 sec avec loopback fixtures
Page 32: Vos fixtures en 30 sec avec loopback fixtures

Questions ?npm install loopback-

fixtures(github.com/sghribi/loopback-fixtures)

Samy Ghribi