• Home
  • Nous contacter

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab
Frontend

Gagner du temps de développement grâce aux mocks et kakapo.js

C’est quoi un mock ?

Un mock est un objet fictif qui permet de simuler un comportement réel.
Ce concept a été inventé pour tester des bouts de code en isolant des objets inaccessibles ou non implémentés.

Source : https://fr.wikipedia.org/wiki/Mock_(programmation_orient%C3%A9e_objet)

C’est quoi le lien avec kakapo.js ?

Une librairie géniale et assez peu connue existe, il s’agit de kakapo.js.
Cette librairie permet d’intercepter les requêtes HTTP et renvoyer la réponse de son choix, le tout via une API déclarative très élégante.
Il est possible d’intercepter les principales méthodes HTTP d’une API (get, post, put, delete), générer des fausses données grâce à un système d’entité, et de faire des traitements avant de renvoyer les réponses.

La documentation est très bien faite et vous serez séduits par la simplicité d’utilisation.

A noter également, cette librairie est disponible pour SWIFT : https://github.com/devlucky/Kakapo

A quoi ça sert ?

Il y a plusieurs avantages à utiliser des mocks dans votre projet :

  • Des réponses instantanés de votre API car il y n’y aura plus d’appel réseau
  • Vous serez donc isolés des coupures réseau
  • Des réponses constantes qui vous éviteront des erreurs dues à des bugs de l’API
  • Arriver dans votre appli sur une page qui contient déjà des données (fixtures) et ne pas avoir à refaire le parcours utilisateur
  • Se rendre compte de l’ihm finale et d’éventuels bugs au niveau du layout (overflow, scroll) et de la gestion du texte (troncature des phrases)
  • Créer des tests unitaires basés sur des vraies données
  • Créer des tests d’ihm rapide

Concrètement comment on fait ?

Mise en place

En quelques lignes, on met en place Kakapo et on peut intercepter les requêtes GET vers une route /users.

Ces exemples sont tirés du site officiel.

import {Router, Server} from 'Kakapo';
  
const router = new Router();

router.get('/users', _ => {
  return [{
    id: 1,
    name: 'Hector'
  }, {
    id: 2,
    name: 'Zarco'
  }]
});

router.get('/users/:user_id', request => {
  const userId = request.params.user_id;
  return [{
    id: userId,
    name: 'PA'
  }];
});

const server = new Server();

server.use(router);

Ces quelques lignes nous montrent la puissance et la facilité d’écriture de Kakapo.
En effet, une requête fetch('/users') sera donc interceptée par le Router et renverra un tableau de deux utilisateurs.
Si on rajoute l’id de l’utilisateur fetch('/users/3'), on obtient une réponse qui ne contient qu’un seul utilisateur.

Aller plus loin grâce à Database

Kakapo fournit un outil très pratique pour générer des données (grâce à Faker.js). On peut non seulement générer des données lors de l’initialisation, mais également en rajouter au fur et à mesure de l’utilisation de notre application.

import {Database} from 'Kakapo';

const database = new Database();

database.register('user', faker => {
  return {
    firstName: faker.name.firstName,
    lastName: faker.name.lastName,
    age: faker.random.number
  };
});

database.create('user', 5);

---
router.get('/users', (request, db) => {
  return db.all('user');
});

Ce code permet de créer 5 utilisateurs avec des données aléatoires, le routeur renverra un tableau contenant nos nouvelles données.

Pour ajouter un nouvel utilisateur, rien de plus simple

router.post('/users', (request, db) => {
  const user = JSON.parse(request.body);

  db.push('user', user);

  return user;
});

On peut également s’amuser à modifier un utilisateur lors d’une requête PUT ou en supprimer lors d’une requête DELETE.


router.put('/users/:user_id', (request, db) => {
  const newLastName = JSON.parse(request.body).lastName;
  const user = db.findOne('user', request.params.user_id);

  user.lastName = newLastName;
  user.save();

  return user;
});

router.delete('/users/:user_id', (request, db) => {
  const user = db.findOne('user', request.params.user_id);
  const code = user ? 200 : 400;
  const body = {code};
  
  user && user.delete();

  return new KakapoResponse(code, body);
});

Cas concret

Pour terminer, je vous propose un exemple d’utilisation plus complet et prêt à être intégré dans votre projet.

Crédit photo : Mark Carwardine/NPL/Minden

12/05/2017 7 MIN READ TAGS: Database, Développement frontend, faker.js, Kakapo, kakapo.js, Mock BY: Pierre-Alexandre Dupuy 0 COMMENT
SHARE
LIRE LA SUITE

Pierre-Alexandre Dupuy

Développeur front et mobile

Hybride VS Natif VS -Native-

Tendances du développement frontend à venir

VOUS POURRIEZ AIMER

Frontend Le sprite generator de compass

Frontend Tribute to WordArt

Frontend Le WebGL, mais pour quelle utilisation

Frontend Media Queries Level 4, l’évolution continue

Frontend Style avancé sur les formulaires

Frontend Devenir plus efficace avec PostCSS

A propos d’Adfab

Nous sommes un studio de production digitales et d’innovation digitales au service des agences et des annonceurs
Nous recherchons le scintillement dans les regards et le plaisir de réalisations sur-performantes
Nous sommes techno-agnostiques
Nous sommes Adfab

Le blog d'Adfab
Copyright © 2018 Adfab Connect