J'ai besoin d'écrire une suite de tests fonctionnelle (qui testera une API GraphQl). La suite de tests se trouvera dans un référentiel et un conteneur distincts de l'API.
Une approche à laquelle je pensais serait d’utiliser un framework BDD dans la suite de tests. La suite exécuterait tous les tests BDD après avoir reçu une requête HTTP.
J'envisageais d'utiliser Cucumber.js comme framework BDD. Je sais qu'il y a npm test
. Je ne sais pas comment je vais exécuter les tests. Il est un peu gênant d'utiliser un framework de tests unitaires de cette manière. Cette approche a-t-elle un sens?
Quel outil existe pour faire quelque chose comme ça? Je suis ouvert à considérer divers langages et outils.
Karate est une structure relativement nouvelle d'automatisation de tests de services Web qui convient parfaitement pour tester les réponses GraphQL en raison de deux fonctionnalités spécifiques.
Voici un bon exemple: graphql.feature
avec un extrait ci-dessous:
# you can also read this query from a file
Given text query =
"""
{
pokemon(name: "Pikachu") {
id
number
name
attacks {
special {
name
type
damage
}
}
}
}
"""
And request { query: '#(query)' }
When method post
Then status 200
# json-path makes it easy to focus only on the parts you are interested in
# which is especially useful for graph-ql as responses tend to be heavily nested
* match $.data.pokemon.number == '025'
# the '..' wildcard is useful for traversing deeply nested parts of the json
* def attacks = get[0] response..special
* match attacks contains { name: 'Thunderbolt', type: 'Electric', damage: 55 }
Même si Karaté nécessite un environnement d'exécution Java, la syntaxe est Cucumber/Gherkin , qui ne dépend pas de la langue. Vous pouvez facilement ajouter des tests de Karaté et reports à votre configuration d'intégration continue existante. Les programmeurs JavaScript se sentiront tout particulièrement chez eux à cause de la manière dont Karaté intègre un runtime JavaScript et prend en charge le langage JSON «indulgent» (aucun guillemet double nécessaire, pas besoin de placer les clés JSON entre guillemets).
Disclaimer: dev ici.
Vous pouvez simplement utiliser npm test avec le programme d’analyse de votre choix. J'utilise moka et chai. Jest pourrait être un peu mieux puisque je crois que c'est probablement la suite de tests la plus avancée. Vous avez simplement créé des tests comme vous le feriez pour tous les systèmes d'extrémité.
it('should be null when user is not logged in', async () => {
const query = `
query {
user(id: "") {
username
email
}
}
`
const rootValue = {};
const context = {};
const result = await graphql(schema, query, rootValue, context);
const { data } = result;
expect(data.user).to.equal(null);
});
assez simple pour le tester. Vous exécutez également une instruction before insérant l'utilisateur concerné dans votre base de données. Le problème de garder une suite de tests séparée est que vous devrez accéder directement à la base de données. Vos tests ne doivent pas dépendre d'autres appels d'API car cela crée des dépendances inutiles. Donc, si un test est rompu, il est alors plus difficile de comprendre la cause fondamentale.