Vos fixtures en 30 sec avec
loopback-fixtures
Samy Ghribi
Meetup Loopback #2 - 28 juin 2016
loopback.getCurrentContext().get(‘CurrentUser’)
Samy Ghribi (GitHub : @sghribi)
Je suis développeur à Theodo
Je viens du m...
Je veux pouvoir visualiser
l’historique des investissements
sur les 5 dernières années
Client
Ça marche !
On va te faire u...
Tada !
Client
Moi
Mon problème
● Jeux de données pour tester
● Jeux de données initiales nécessaires au fonctionnement de
mon application
● ...
Prenons un exemple !
Modèle "User”
Nom
Email
Date de naissance
{
"name": "User",
"properties": {
"name": {
"type": "string"
},
"email": {
"type...
La méthode "à la main”
var users = [
{
"name”: "Jean Michel”,
"email”:
"jean.michel@gmail.com”,
"birthDate”: new Date(1990...
La méthode "programmatique”
var users = [];
for (var i = 1; i <= 10; i++) {
users.push({
"name": "User n°"+i,
"email": "em...
La méthode "programmatique”
name email birthdate
User n°1 email1@gmail.com ‘1990-01-01’
User n°2 email2@gmail.com ‘1990-02...
Et maintenant avec deux modèles ?
{
"name": "User",
"properties": {
// name, email, birthDate
},
"relations": {
"group": {...
Et maintenant avec deux modèles ?
var users = [];
var groups = [];
for (var i = 1; i <= 10; i++) {
users.push({
"name": "U...
Et maintenant avec deux modèles ?
var users = [];
var groups = [];
for (var i = 1; i <= 10; i++) {
users.push({
"name": "U...
loopback-fixtures
“loopback-fixtures”, késako ?
Composant loopback
Module NPM
Inspiré de “nelmio/alice” de PHP
Comment on l’utilise ?
npm install loopback-fixtures --save
{
// Some other stuff...
"loopback-fixtures": {}
}
server/comp...
Chargement de données
Group:
group{1..3}:
name: "Groupe n°{@} depuis les fixtures"
User:
user{1..10}:
name: "User n°{@} : ...
Chargement de données
User:
user_alice:
name: "Alice"
email: "alice@gmail.com"
birthDate: "1993-06-24"
user_bob:
name: "Bo...
Gammes d’objets
User:
user_{1..500}:
name: "User n°{@}"
email: "user{@}@gmail.com"
birthDate: "1993-06-24"
fixture/data/da...
Gammes d’objets
User:
user_{1..500}:
name: "User n°{@}"
email: "user{@}@gmail.com"
birthDate: "1993-06-24"
fixture/data/da...
Données aléatoires
User:
user_{1..500}:
name: "{{name.firstName}} {{name.lastName}}"
email: "{{internet.email}}"
birthDate...
En dernier recours…
User:
user_samy:
name: "Jean Michel"
weight: "(function() { return Math.random()*100;})()"
fixture/dat...
Références entre modèles (simple)
Group:
group_jaune:
name: "Les jaunes"
User:
samy:
name: "Samy"
groupId: @group_jaune
fi...
Références entre modèles (wildcard)
Group:
group_jaune:
name: "Les jaunes"
group_bleu:
name: "Les bleus"
les_rouges:
name:...
Bilan
Group:
group{1..8}:
name: "Groupe n°{@} depuis les fixtures"
User:
user{1..100}:
name: "User n°{@} : {{name.lastName...
Usages
{
// other stuff...
"loopback-fixtures": {
"autoLoad": true
}
}
server/component-config.json
Chargement au
démarrag...
Quelques options
"autoLoad": true/false : chargement au démarrage de l’appli ?
"append": true/false : ajoute et/ou efface ...
Client
Moi
Questions ?
npm install loopback-fixtures
(github.com/sghribi/loopback-fixtures)
Samy Ghribi
Vos fixtures en 30 sec avec loopback fixtures
Vos fixtures en 30 sec avec loopback fixtures
Prochain SlideShare
Chargement dans…5
×

Vos fixtures en 30 sec avec loopback fixtures

141 vues

Publié le

Vos fixtures en 30 sec avec loopback fixtures : https://github.com/sghribi/loopback-fixtures

Publié dans : Internet
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
141
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Rajouter exemples ave faker.js ?
  • Vos fixtures en 30 sec avec loopback fixtures

    1. 1. Vos fixtures en 30 sec avec loopback-fixtures Samy Ghribi Meetup Loopback #2 - 28 juin 2016
    2. 2. 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 😃)
    3. 3. 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
    4. 4. Tada !
    5. 5. Client Moi
    6. 6. 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 !
    7. 7. Prenons un exemple !
    8. 8. Modèle "User” Nom Email Date de naissance { "name": "User", "properties": { "name": { "type": "string" }, "email": { "type": "string" }, "birthDate": { "type": "date" } } }
    9. 9. La méthode "à la main” var users = [ { "name”: "Jean Michel”, "email”: "jean.michel@gmail.com”, "birthDate”: new Date(1990, 1, 1) }, { "name”: "Anne Delarue”, "email”: "delarue.anne@hotmail.fr”, "birthDate”: new Date(1985, 3, 1) }, // Etc ... ]; app.models.User.create(users, done); Sympa, mais pas plus de 10... et fastidieuse
    10. 10. 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);
    11. 11. La méthode "programmatique” name email birthdate User n°1 email1@gmail.com ‘1990-01-01’ User n°2 email2@gmail.com ‘1990-02-01’ User n°3 email3@gmail.com ‘1990-03-01’ User n°4 email4@gmail.com ‘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
    12. 12. 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”
    13. 13. 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]] }); }
    14. 14. 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 !
    15. 15. loopback-fixtures
    16. 16. “loopback-fixtures”, késako ? Composant loopback Module NPM Inspiré de “nelmio/alice” de PHP
    17. 17. 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
    18. 18. 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
    19. 19. Chargement de données User: user_alice: name: "Alice" email: "alice@gmail.com" birthDate: "1993-06-24" user_bob: name: "Bob" email: "bob@gmail.com" birthDate: "1993-06-24" fixture/data/data.yml Nom du modèle Identifiant unique Données
    20. 20. Gammes d’objets User: 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
    21. 21. 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: "user1@gmail.com" birthDate: "1993-06-24" user_2: name: "User n°2" email: "user2@gmail.com" birthDate: "1993-06-24" # … 500 fois au total fixture/data/data.yml
    22. 22. 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
    23. 23. En dernier recours… User: user_samy: name: "Jean Michel" weight: "(function() { return Math.random()*100;})()" fixture/data/data.yml Vraiment en dernier recours !
    24. 24. 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
    25. 25. 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
    26. 26. 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
    27. 27. 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]
    28. 28. 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
    29. 29. Client Moi
    30. 30. Questions ? npm install loopback-fixtures (github.com/sghribi/loopback-fixtures) Samy Ghribi

    ×