Ginkgo est un cadre de test mature pour GO conçu pour vous aider à rédiger des spécifications expressives. Ginkgo s'appuie sur la Fondation testing
de Go et est complété par la bibliothèque Gomega Matcher. Ensemble, Ginkgo et Gomega vous permettent d'exprimer clairement l'intention derrière vos spécifications:
importer ( . "github.com/onsi/ginkgo/v2". "github.com/onsi/gomega"...)var _ = décrire (" vérifier les livres de la bibliothèque ", label (" bibliothèque "), func () {var bibliothèque * bibliothèques.Libraryvar Book * books.bookvar Valjean * Users.UserbeForeEach (func () {Library = Libraires.NewClient () book = & books.book {Title: "Les Misérables", auteur: "Victor Hugo", } valjean = users.newuser ("Jean Valjean") }) Quand ("La bibliothèque a le livre en question", func () {BeforeEach (func (ctx specContext) {attendre (bibliothèque.store (ctx, livre)). To (succeed ()) }) Context ("et le livre est disponible", func () {it ("le prête au lecteur", func (ctx specContext) {attendre (Valjean.checkout (ctx, bibliothèque, "Les Misérables")). (Succeed ()) attendre (Valjean.Books ()). To (Contailement (Book)) attendre (Library.UserWithbook (CTX, livre)). To (Equal (Valjean))) }, Spectimeout (time.second * 5)) }) Context ("mais le livre a déjà été vérifié", func () {var javert * users.userBeForeEach (func (ctx specContext) {javert = users.newuser ("javert") attend (javert.checkout (ctx, bibliothèque, "Les Misérables")). To (succeed ()) }) It ("raconte à l'utilisateur", func (ctx specContext) {err: = Valjean.checkout (ctx, bibliothèque, "les Misérables") ) }, SpectEtout (time.second * 5)) it ("permet à l'utilisateur de placer une maintenance et d'être notifié plus tard", func (ctx specContext) {attendre (Valjean.hold (ctx, bibliothèque, "Les Misérables")). To. (Succeed ()) attendre (Valjean.holds (ctx)). À (Contailement (livre)) par ("quand Javert renvoie le livre") attendre (javert.return (ctx, bibliothèque, livre)). To (succee )) Par ("Il finit par informer Valjean") Notification: = "Les Misérables est prêt à ramasser" éventuellement (CTX, Valjean.Notifications). Les Misérables ")). To (succeed ()) attendre (Valjean.Books (CTX)). To (Contailement (livre)) attendre (Valjean.holds (CTX)). To (beempty ()) }, Spectimeout (time.second * 10)) }) }) Quand ("La bibliothèque n'a pas le livre en question", func () {it ("dit au lecteur que le livre n'est pas disponible", func (ctx specContext) {err: = Valjean.checkout (ctx, bibliothèque, " Les Misérables ") s'attendre à (err) .to (Matcherror (" Les Misérables n'est pas dans le catalogue de la bibliothèque ")) }, Spectimeout (time.second * 5)) }) })
Sautez dans les documents pour en savoir plus. Il est facile de démarrer et de commencer à écrire vos premières spécifications.
Si vous avez une question, un commentaire, un rapport de bogue, une demande de fonctionnalité, etc., veuillez ouvrir un problème GitHub ou visiter la chaîne Ginkgo Slack.
Que la rédaction de spécifications unitaires de base, de spécifications d'intégration complexes ou même de spécifications de performance - Ginkgo vous donne un langage expressif spécifique au domaine (DSL) qui sera familier aux utilisateurs issus de cadres tels que Quick, RSpec, Jasmine et éclaté. Ce style de test est parfois appelé «développement axé sur le comportement» (BDD), bien que l'utilité de Ginkgo s'étend au-delà des tests au niveau de l'acceptation.
Avec le DSL de Ginkgo, vous pouvez utiliser NESTABLE Describe
, Context
et When
les nœuds de conteneur pour vous aider à organiser vos spécifications. BeforeEach
les nœuds de configuration et AfterEach
pour la configuration et le nettoyage. It
et Specify
les nœuds de sujet qui détiennent vos affirmations. BeforeSuite
et Nœuds AfterSuite
à préparer et à nettoyer après une suite ... et bien plus encore!.
Au moment de l'exécution, Ginkgo peut exécuter vos spécifications dans un ordre reproductible aléatoire et a un support sophistiqué pour la parallélisation des spécifications. En fait, l'exécution de spécifications en parallèle est aussi simple que
ginkgo -p
En suivant les modèles établis pour l'écriture de spécifications parallèles, vous pouvez construire des suites d'intégration encore importantes et complexes qui parallélisent proprement et fonctionnent avec performance. Et vous n'avez pas à vous soucier de la suspension de votre suite de spécifications ou de laisser un gâchis derrière - Ginkgo fournit un context.Context
par nœud.
Au fur et à mesure que vos suites grandissent, Ginkgo vous aide à garder vos spécifications organisées avec des étiquettes et vous permet d'exécuter facilement des sous-ensembles de spécifications, soit par programme ou sur la ligne de commande. Et l'infrastructure de rapport de Ginkgo génère une sortie lisible par machine dans une variété de formats et vous permet de créer votre propre infrastructure de rapport personnalisée.
Ginkgo est expédié avec ginkgo
, un outil de ligne de commande avec prise en charge de la génération, de l'exécution, du filtrage et du profilage des suites Ginkgo. Vous pouvez même avoir Ginkgo exécuter automatiquement vos spécifications lorsqu'il détecte un changement avec ginkgo watch
, permettant des boucles de rétroaction rapides pendant le développement piloté par le test.
Et c'est juste du ginkgo! Gomega apporte une famille riche et mature d'assertions et de matchs à vos suites. Avec Gomega, vous pouvez facilement mélanger des affirmations synchrones et asynchrones dans vos spécifications. Vous pouvez même construire votre propre ensemble de correspondances expressives spécifiques au domaine rapidement et facilement en composant les blocs de construction existants de Gomega.
Bonnes tests!
Ginkgo est licencié du MIT
Voir contribution.md