7. 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 !
9. Modèle "User”
Nom
Email
Date de naissance
{
"name": "User",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"birthDate": {
"type": "date"
}
}
}
10. 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
11. 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);
12. 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
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]]
});
}
15. 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 !
18. 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
19. 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
20. 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
21. 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
25. 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
26. 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
27. 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
28. 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]
29. 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