# Intégrations : Playwright, Cypress et bibliothèques · Facteur

> Une API HTTP qui ne demande aucun paquet, et l'état de chaque paquet préparé pour Node, Playwright et Cypress : écrits, pas encore publiés.
> https://facteur.eu/fr/integrations

/ Intégrations

#  Le canal, c'est votre framework de test 

 Sur ce marché, on n'intègre pas une API : on installe un paquet dans son framework. Quatre paquets sont écrits, pour Node, Playwright, Cypress et le premier test. Aucun n'est encore publié sur npm, et cette page montre ce qui marche dès aujourd'hui sans eux.

 [ Lire le premier appel ](https://developers.facteur.eu/fr/guides/quickstart/) [ Toute la documentation ](/fr/documentation) 

 

 Aujourd'hui

## Une API HTTP, et rien à installer

L'attente se fait côté serveur et l'extraction à la réception : un test appelle la recherche de messages sans rien installer. Voici un parcours de vérification par e-mail complet, en Playwright, sans un seul paquet de Facteur.

 

       inscription.spec.ts TypeScript 

 

```
<span class="hl-keyword">import</span> { expect, test } <span class="hl-keyword">from</span> <span class="hl-value">'@playwright/test'</span>;

<span class="hl-keyword">const</span> INBOX = <span class="hl-value">'j3k9x2mq'</span>;

<span class="hl-comment">// Reste ouverte jusqu'à l'arrivée du message, trente secondes au plus.</span>
<span class="hl-keyword">async</span> <span class="hl-keyword">function</span> <span class="hl-property">waitForMail</span>(<span class="hl-property">sentTo</span>: <span class="hl-type">string</span>) {
  <span class="hl-keyword">const</span> search = <span class="hl-keyword">new</span> <span class="hl-type">URLSearchParams</span>({ <span class="hl-property">inbox</span>: <span class="hl-type">INBOX</span>, sentTo, <span class="hl-property">wait</span>: <span class="hl-value">'30000'</span> });
  <span class="hl-keyword">const</span> response = <span class="hl-keyword">await</span> <span class="hl-property">fetch</span>(<span class="hl-value">'https://api.facteur.eu/v1/messages?'</span> + search, {
    <span class="hl-property">headers</span>: { <span class="hl-property">authorization</span>: <span class="hl-value">'Bearer '</span> + process.<span class="hl-property">env</span>.<span class="hl-property">FACTEUR_API_KEY</span> },
  });
  <span class="hl-keyword">const</span> { messages } = <span class="hl-keyword">await</span> response.<span class="hl-property">json</span>();
  <span class="hl-keyword">if</span> (!messages[0]) <span class="hl-keyword">throw</span> <span class="hl-keyword">new</span> <span class="hl-type">Error</span>(<span class="hl-value">'Rien n\'est arrivé pour '</span> + sentTo);
  <span class="hl-keyword">return</span> messages[0];
}

<span class="hl-property">test</span>(<span class="hl-value">'le lien de vérification active le compte'</span>, <span class="hl-keyword">async</span> ({ page }) => {
  <span class="hl-keyword">const</span> tag = <span class="hl-value">'run-'</span> + <span class="hl-type">Date</span>.<span class="hl-property">now</span>();

  <span class="hl-comment">// Lancée avant le clic : elle répond dès que le message arrive.</span>
  <span class="hl-keyword">const</span> arriving = <span class="hl-property">waitForMail</span>(<span class="hl-value">'signup+'</span> + tag);

  <span class="hl-keyword">await</span> page.<span class="hl-property">goto</span>(<span class="hl-value">'/signup'</span>);
  <span class="hl-keyword">await</span> page.<span class="hl-property">getByLabel</span>(<span class="hl-value">'Email'</span>).<span class="hl-property">fill</span>(<span class="hl-value">'signup+'</span> + tag + <span class="hl-value">'@'</span> + INBOX + <span class="hl-value">'.inbox.facteur.eu'</span>);
  <span class="hl-keyword">await</span> page.<span class="hl-property">getByRole</span>(<span class="hl-value">'button'</span>, { <span class="hl-property">name</span>: <span class="hl-value">'Créer mon compte'</span> }).<span class="hl-property">click</span>();

  <span class="hl-keyword">const</span> message = <span class="hl-keyword">await</span> arriving;

  <span class="hl-comment">// Le status avant tout champ tiré du corps du message.</span>
  <span class="hl-property">expect</span>(message.<span class="hl-property">status</span>).<span class="hl-property">toBe</span>(<span class="hl-value">'parsed'</span>);
  <span class="hl-keyword">await</span> page.<span class="hl-property">goto</span>(message.<span class="hl-property">links</span>[0]);

  <span class="hl-keyword">await</span> <span class="hl-property">expect</span>(page.<span class="hl-property">getByText</span>(<span class="hl-value">'Compte vérifié'</span>)).<span class="hl-property">toBeVisible</span>();
});
```

 Le même appel est dans les guides du portail des développeurs, qui le jouent contre le service.  

 Ce que montre l'exemple

## Quatre lignes qui comptent

 

01

### La requête part avant le clic

Elle attend, et répond à l'instant où le message arrive, pas à l'échéance. Lancée après, elle courrait après un message peut-être déjà là.

 

02

### Le sous-adressage sépare les tests

Tout ce qui suit le « + » est à vous. C'est ce qui permet à deux tests de partager une inbox sans se voler leurs messages.

 

03

### On lit status avant tout champ dérivé

Un message accepté existe un instant avant d'être lu : il n'a alors ni sujet, ni code, ni liens. Par défaut, la recherche ne rend que les messages déjà lus, à l'état parsed.

 

04

### La clé se lit dans l'environnement

Jamais écrite dans le test, jamais passée en argument : FACTEUR\_API\_KEY. Les paquets reprennent la même convention.

 





 

 

 Ce que nous préparons

## Quatre paquets écrits, aucun publié

Chaque paquet est dans le dépôt de Facteur, avec ses tests. Aucun n'est encore publié sur npm : la publication suivra la mise en service de l'API.

 

    Paquet Nom sur npm État      Une bibliothèque Node minimale Ouvrir une inbox, attendre un message, le lire avec ce qui en a été extrait, télécharger une pièce jointe. Aucune dépendance à l'exécution.   @facteur-eu/sdk   Écrit, pas encore publié     Un plugin Playwright, pas encore publié Une adresse dérivée du test lui-même : deux tests en parallèle ne lisent jamais le même courrier, et un test rejoué ne relit pas celui de sa première tentative. L'attente s'arrête dans le budget du test, et le message reçu est attaché au rapport.   playwright-facteur   Écrit, pas encore publié     Un plugin Cypress, pas encore publié Une adresse par test et une commande qui attend le message. La clé reste dans Node, hors du navigateur.   cypress-facteur   Écrit, pas encore publié     Un initialiseur npm create Deux questions, puis un premier test Playwright ou Cypress qui attend un e-mail et lit son code.   create-facteur   Écrit, pas encore publié    

- La publication suivra la mise en service de l'API : un paquet installé avant viserait un service qui ne répond pas encore.
- Les quatre noms existent déjà sur npm, avec des versions qui visent une ancienne API de Facteur. Ne les installez pas : elles ne marchent pas avec le service d'aujourd'hui.
- En attendant, les guides du portail des développeurs appellent l'API en HTTP. Ils continueront de marcher le jour où les paquets seront publiés.
 
 

 

 

## Rien à installer pour un premier test

Une clé en lecture seule, une inbox, et l'exemple ci-dessus. L'offre gratuite ne demande pas de carte bancaire.

 [ Créer un compte gratuit ](/fr/inscription) [ Comment migrer ](/fr/migrer)
