Snippets réutilisables

Snippets réutilisables

Quand plusieurs checks partagent le même flux de connexion ou la même logique utilitaire, copier ce code dans chaque script crée un problème de maintenance. Les snippets réutilisables vous permettent d'écrire la logique une seule fois, de lui donner un nom, et de l'inclure depuis n'importe quel script de setup, teardown, navigateur ou multistep de votre équipe.

Ce que sont les snippets

Les snippets sont des modules JavaScript à portée d'équipe, stockés dans l'application. Tous les membres de l'équipe peuvent les utiliser. Quand LoadFocus exécute un check, il résout le snippet par son nom et l'injecte dans le bac à sable du script. Le code s'exécute avec le même accès à ctx, aux variables d'environnement et aux modules npm disponibles que le script lui-même.

Créer un snippet

  1. Ouvrez la page Snippets depuis la barre latérale (dans le groupe des paramètres).
  2. Cliquez sur Nouveau snippet.
  3. Donnez-lui un nom composé de lettres, chiffres, tirets et underscores (par exemple login-helper ou sign_request). Ce nom est l'identifiant que vous utiliserez dans les scripts.
  4. Écrivez du JavaScript qui exporte une fonction ou une valeur via module.exports.

Exemple de snippet nommé login :

// Snippet : login
const axios = require('axios');
module.exports = async function login(ctx) {
const res = await axios.post('https://api.example.com/auth', {
username: ctx.env.USERNAME,
password: ctx.env.SECRET,
});
ctx.vars.token = res.data.token;
};

Ce snippet récupère un jeton et le stocke dans ctx.vars.token pour que le check puisse le lire.

Utiliser un snippet dans un script

Incluez le snippet par son nom en utilisant le chemin ./snippets/<name> :

const login = require('./snippets/login');
module.exports = async function setup(ctx) {
await login(ctx);
// ctx.vars.token est maintenant disponible pour le check
};

Le même schéma fonctionne dans les scripts de teardown, les scripts navigateur et les scripts multistep.

Notes et limitations

  • Chemin littéral uniquement. Seule la forme require('./snippets/<name>') est résolue. Les chemins dynamiques tels que require('./snippets/' + name) ne sont pas pris en charge.
  • Pas de résolution snippet-à-snippet (v1). Un snippet qui en inclut un autre n'est pas résolu automatiquement. Regroupez la logique partagée dans un seul snippet si nécessaire.
  • Les snippets manquants échouent immédiatement. Si un snippet requis n'existe pas, l'exécution du check échoue immédiatement avant d'être envoyée, avec une erreur identifiant le nom manquant.
  • Bac à sable partagé. Les snippets s'exécutent dans le même bac à sable que le script appelant et partagent l'accès à ctx, aux variables d'environnement, aux secrets et à l'ensemble des modules npm disponibles.

Guides associés

Voir Scripts de préparation et de nettoyage pour comprendre comment fonctionnent les scripts setup et teardown et ce que vous pouvez faire avec eux.