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
- Ouvrez la page Snippets depuis la barre latérale (dans le groupe des paramètres).
- Cliquez sur Nouveau snippet.
- Donnez-lui un nom composé de lettres, chiffres, tirets et underscores (par exemple
login-helperousign_request). Ce nom est l'identifiant que vous utiliserez dans les scripts. - Écrivez du JavaScript qui exporte une fonction ou une valeur via
module.exports.
Exemple de snippet nommé login :
// Snippet : loginconst 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 querequire('./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.