Passer au contenu principal
scenario() déclare un test de votre bot, depuis un fichier *.test.ts de src/, et chapterjs test le lance contre un Discord en mémoire. Tout ce qui est sur cette page s’importe depuis chapterjs/test.
src/checks/hello.test.ts
src/checks/hello.ts
Comment tester un bot, ce qui est vérifié sans scénario et ce qu’a le serveur de test est dans le guide. Cette page liste ce qui existe.

scenario()

Déclare un test de votre bot. Exportez le résultat depuis un fichier *.test.ts de src/ : chapterjs test le lance contre un Discord en mémoire, où le bot est dans un serveur avec quelques personnes. bot est le bot dans son serveur de test : bot.use() lance une commande, bot.click() appuie sur un bouton, bot.say() envoie un message en tant que quelqu’un, et ce qui revient dit ce que le bot a répondu. Un fichier peut exporter plusieurs scénarios, dans une liste aussi. Le libellé est ce que montre le rapport : il ne peut pas être vide, et 120 caractères est le maximum.

ScenarioDeclaration

Ce que renvoie scenario() : une déclaration que le lanceur trouve dans les exports d’un fichier.
{ label: string; run: (bot: TestBot) => unknown }
Ce que le fichier a donné à scenario(), pas encore vérifié.

TestBot

Le bot du projet, qui tourne dans un Discord en mémoire : un serveur, quelques personnes, et tout ce que fait le bot gardé là où le test peut le lire.
{ id: string; name: string }
requis
Le serveur de test.
TestMember
requis
Le bot lui-même, en tant que membre du serveur.
TestMember
requis
Le propriétaire du serveur.
TestMember
requis
Une personne sans droit particulier : qui fait les choses quand personne n’est nommé.
{ method: string; path: string; body: unknown }[]
requis
Chaque requête que le bot a envoyée à Discord jusqu’ici.

member()

Une personne du serveur, créée la première fois que le nom est donné. Les options ne comptent que la première fois.

role()

Un rôle du serveur, créé la première fois que le nom est donné.

channel()

Un salon du serveur, créé la première fois que le nom est donné. #general existe.

use()

Utilise une commande, comme une personne le ferait : une commande slash avec ses options, ou une commande de menu sur ce sur quoi elle s’utilise ({ on: message }, { on: member } ; un menu de message s’utilise dans le salon de son message). Se résout une fois que le bot a répondu. options est typé depuis les options de la commande (OptionInputsOf) : un texte, un nombre, true ou false, l’un des choices, un TestMember pour une option user, un TestRole pour une option role, un TestChannel pour une option channel, un TestFile pour une option attachment. Il peut être omis quand la commande n’en exige aucune. Ce que Discord ne laisserait pas une personne envoyer (une option obligatoire manquante, un nombre hors de sa plage, un texte trop long, une valeur qui n’est pas un des choix) fait échouer le scénario avant que le bot n’en entende parler.

click()

Clique sur un bouton. Se résout une fois que le bot a répondu. Un bouton trouvé sur un message (reply.button('Confirmer')) est cliqué sur ce message, comme le ferait une personne.

select()

Choisit des valeurs dans un menu déroulant. Se résout une fois que le bot a répondu. values sont des textes pour un menu de textes (les valeurs de ses options), des personnes, des rôles ou des salons pour les autres ; les min et max du menu sont appliqués.

submit()

Remplit et envoie un formulaire. Se résout une fois que le bot a répondu. fields est typé depuis les champs du formulaire (FieldInputsOf) : un texte pour un champ text, une liste de valeurs d’options pour un select ou checkboxes, une valeur d’option pour un radio, true ou false pour un checkbox, des personnes, rôles ou salons pour les autres, des fichiers pour un champ files. Un champ omis reste vide ; un champ obligatoire omis fait échouer le scénario, comme l’application Discord refuserait d’envoyer le formulaire.

suggest()

Tape dans une option avec suggestions, et récupère ce que le bot suggère.

say()

Envoie un message en tant que quelqu’un. Se résout une fois que le bot l’a traité.

react()

Réagit à un message en tant que quelqu’un. Se résout une fois que le bot l’a traité.

join()

Fait rejoindre le serveur à quelqu’un. Se résout une fois que le bot l’a traité.

leave()

Fait quitter le serveur à quelqu’un. Se résout une fois que le bot l’a traité.

run()

Lance une tâche maintenant, comme si son heure était venue. Se résout une fois qu’elle a fini.

settle()

Attend que tout ce que le bot a commencé soit terminé. Tout sauf ce qui attend que le test agisse : une fonction qui attend un message, un clic ou une réaction (waitForMessage()…) reste en attente, et use(), say(), click()… se résolvent pendant ce temps.

endWaits()

Termine tout ce qu’attend le bot (waitForMessage(), waitForClick()…) comme si son temps était écoulé : le temps ne passe pas dans le serveur de test. Se résout une fois que le bot l’a traité.

TestWhere

Qui fait quelque chose, et où.
TestMember
Qui le fait. Par défaut : bot.someone.
TestChannel | 'dm'
Où : un salon, ou 'dm' pour un message privé avec le bot. Par défaut : #general.
TestMessage | TestReply
Pour un bouton ou un menu : le message sur lequel il est. Par défaut : un message du bot.

TestMemberOptions

Comment créer une personne pour un test.
(string | TestRole)[]
Les rôles de la personne, par nom ou tels que bot.role() les a donnés.
PermissionName[]
Des permissions données par un rôle rien qu’à elle.
string
Le pseudo sur le serveur.
boolean
Si la personne est un bot.
Locale
La langue de la personne : celle dans laquelle t lui répond. Par défaut : 'en-US'.

TestRoleOptions

PermissionName[]
Ce que le rôle permet.

TestChannelOptions

TestChannelType
'text', 'announcement', 'voice', 'category' ou 'forum'. Par défaut : 'text'.
TestChannel
La catégorie dans laquelle il est.
string
Le sujet du salon.

TestFile

Un fichier que quelqu’un joint à une commande ou à un formulaire.
string
requis
Le nom du fichier, avec son extension : photo.png.
string
Son contenu, en texte.
string
Son type de média : deviné depuis le nom par défaut.

TestReply

Ce que le bot a répondu à une commande, un bouton, un menu ou un formulaire. Il a chaque vérification de TestAssertions, et :
TestMessage | null
requis
Le message avec lequel le bot a répondu (ou qu’il a changé), ou null sans message.
string
requis
Le texte de la réponse ; '' sans message.
Embed[]
requis
Les embeds, tels que le bot les a envoyés.
TestButton[]
requis
Ses boutons, dans l’ordre.
TestMenu[]
requis
Ses menus déroulants, dans l’ordre.
TestMessage[]
requis
Les messages envoyés après la première réponse, dans l’ordre.
TestForm | null
requis
Le formulaire que le bot a ouvert, ou null.
boolean
requis
Si le bot a dit que la réponse arrivait avant de répondre.
boolean
requis
Si la réponse a changé le message du composant.
boolean
requis
Si une seule personne la voit.

isDeferred()

Vérifie que le bot a dit que la réponse arrivait (« thinking… »).

updatesMessage()

Vérifie que le bot a changé le message du bouton ou du menu.

opensForm()

Vérifie que le bot a ouvert un formulaire, celui-ci quand il est donné : son export (quelles que soient les données qu’il porte), le formulaire appelé avec ses données, ou celui trouvé sur une réponse.

changesNothing()

Vérifie que le bot a répondu sans rien de visible (une mise à jour différée).

button()

Le bouton avec ce libellé, pour cliquer dessus. Échoue quand il n’y en a pas.
Le menu, ou celui qui a ce texte d’attente. Échoue quand il n’y en a pas.

TestAssertions

Ce qui se vérifie d’un message ou d’une réponse. Chaque vérification lance une TestFailure avec une phrase en clair quand elle échoue, et renvoie ce qu’elle a vérifié sinon, pour enchaîner.

says()

Vérifie que le texte contient text (ou lui correspond).

saysExactly()

Vérifie que le texte est exactement text.

isEphemeral()

Vérifie que seule la personne qui a demandé le voit.

isPublic()

Vérifie que tout le monde le voit.

hasButton()

Vérifie qu’il y a un bouton avec ce libellé.

hasEmbed()

Vérifie qu’il y a un embed, avec ce titre quand il est donné.

hasNoEmbed()

Vérifie qu’il n’y a pas d’embed.

hasNoComponent()

Vérifie qu’il n’y a ni bouton ni menu.

TestMessage

Un message du serveur de test. Il a chaque vérification de TestAssertions, et :
string
requis
L’id du message.
string
requis
Le texte du message.
TestMember | null
requis
Qui l’a écrit ; null pour quelqu’un qui n’est plus dans le monde.
boolean
requis
Si le bot l’a écrit.
Embed[]
requis
Les embeds, tels que le bot les a envoyés.
TestButton[]
requis
Ses boutons, dans l’ordre.
TestMenu[]
requis
Ses menus déroulants, dans l’ordre.
boolean
requis
Si une seule personne le voit.
boolean
requis
Si le message est épinglé.
TestChannel
requis
Le salon dans lequel il est.
boolean
requis
Si le message a été supprimé depuis.

button()

Le bouton avec ce libellé : pour cliquer dessus. Échoue quand il n’y en a pas.
Le menu, ou celui qui a ce texte d’attente. Échoue quand il n’y en a pas.

TestMember

Une personne du serveur de test.
string
requis
L’id de la personne.
string
requis
Le nom d’utilisateur de la personne : ce qui a été donné à bot.member().
string | null
requis
Le pseudo sur le serveur, ou null sans pseudo.
string[]
requis
Les noms des rôles de la personne.
PermissionName[]
requis
Les permissions de la personne sur le serveur.
boolean
requis
Si la personne est sur le serveur en ce moment.
boolean
requis
Si la personne est bannie du serveur.
boolean
requis
Si la personne est exclue temporairement en ce moment.
TestMessage[]
requis
Les messages que le bot a envoyés à la personne en privé, du plus ancien au plus récent.

can()

Si la personne a le droit de faire cela sur le serveur.

hasRole()

Si la personne a ce rôle.

TestRole

Un rôle du serveur de test.
string
requis
L’id du rôle.
string
requis
Le nom du rôle.
PermissionName[]
requis
Ce que le rôle permet.
boolean
requis
Si le rôle existe encore.

TestChannel

Un salon du serveur de test, un fil, ou une conversation privée.
string
requis
L’id du salon.
string
requis
Le nom du salon.
string
requis
Quel genre de salon c’est : 'text', 'voice', 'thread', 'dm'…
string | null
requis
Le sujet, ou null.
number
requis
Les secondes entre deux messages d’une même personne (mode lent) ; 0 pour aucun.
boolean
requis
Si le salon existe encore.
TestMessage[]
requis
Chaque message que tout le monde y voit, du plus ancien au plus récent (les supprimés et les éphémères mis à part).
TestMessage | null
requis
Le message le plus récent, ou null.
TestChannel[]
requis
Les fils ouverts dedans.
TestMember[]
requis
Pour un fil : qui est dedans.
boolean
requis
Pour un fil : s’il est archivé.
boolean
requis
Pour un fil : s’il est verrouillé.

allows()

Si un membre a le droit de faire cela dans le salon (ses permissions spécifiques comptées).

TestButton

Un bouton sur un message envoyé par le bot.
string | null
requis
Le texte du bouton, ou null pour un emoji seul.
string
requis
'primary', 'secondary', 'success', 'danger', 'link' ou 'premium'.
boolean
requis
Si le bouton est désactivé.
string | null
requis
L’id que le framework a écrit dedans.

TestMenu

Un menu déroulant sur un message envoyé par le bot.
string
requis
'string', 'user', 'role', 'mentionable' ou 'channel'.
string | null
requis
Le texte affiché quand rien n’est choisi.
boolean
requis
Si le menu est désactivé.
{ label: string; value: string }[]
requis
Pour un menu de textes : ses options.
string
requis
L’id que le framework a écrit dedans.

TestForm

Un formulaire que le bot a ouvert.
string
requis
Le titre du formulaire.
string[]
requis
Les noms de ses champs, dans l’ordre.
string
requis
L’id que le framework a écrit dedans.

TestSuggestion

Une suggestion que le bot a faite pendant que quelqu’un tapait dans une option.
string
requis
Ce que la personne voit.
string | number
requis
Ce que le bot reçoit.

Types

  • OptionInputsOf<Options> : les options d’une commande telles qu’un test les remplit. Une option obligatoire ne peut pas être omise.
  • FieldInputsOf<Fields> : les champs d’un formulaire tels qu’un test les remplit : un champ omis reste vide.
  • SelectInput : ce qu’un test choisit dans un menu : des textes, ou des personnes, rôles et salons.
  • TestMenuTarget<Type> : ce sur quoi s’utilise une commande de menu dans un test : { on }, un TestMember pour un menu 'user', un TestMessage pour un menu 'message'.
  • ButtonTarget : un bouton, tel qu’un test le nomme : la déclaration, une instance, ou un bouton trouvé sur un message (reply.button('Confirmer')).
  • SelectTarget : un menu, de la même façon (reply.menu()).
  • FormTarget<Fields> : un formulaire, de la même façon (reply.form).
  • TestChannelType : 'text' | 'announcement' | 'voice' | 'category' | 'forum'.
  • TestFailure : une attente d’un test que le bot n’a pas satisfaite. Ce que lance chaque vérification, avec une phrase en clair : le rapport l’affiche avec la ligne du scénario.