Behat sucht standardmäßig nach den Schrittdefinitionen in der Datei FeatureContext
(alle Schritte in einer Datei).
Mit vielen Schritten ist es schwierig, eine so große Datei zu verwalten.
Ich hätte gerne eine Definitionsdatei pro Feature-Datei.
Wie kann ich Schrittdefinitionen in externen Dateien haben?
z.B.
%Vor%Behat verfügt über mehrere Optionen, mit denen Sie Ihren FeatureContext in mehrere Klassen aufteilen können. Zuerst können Sie die Old-School-PHP5-Vererbung verwenden. Wenn die Vererbung nicht das ist, was Sie wollen, unterstützt Behat auch Unterkontexte: " Unterkontexte verwenden " .
Wenn Sie als Nächstes Ihre Klasse anders als FeatureContext
benennen möchten, können Sie das in "" neu definieren Kontextkonfiguration "Abschnitt Ihrer behat.yml
Konfigurationsdatei.
Auf diese Weise können Sie allgemeine Definitionen und Hooks in separate Klassen aufteilen und sie in anderen Feature-Suites entweder mit Sub-Contexting oder Vererbung verwenden.
Aber Ihre Frage fragt auch:
Ich hätte gerne eine Definitionsdatei pro Feature-Datei.
Diese Anfrage ist völlig falsch. Bei Behat and Scenario BDD geht es darum, das Anwendungsverhalten in Geschäftsbegriffen zu beschreiben und ein Testwörterbuch für beschriebenes Verhalten zu erstellen. Wenn Sie das im Hinterkopf behalten, können Sie logischerweise nicht mehrere verschiedene Wörterbücher für ein Feature-Set haben. Indem Sie Schrittdefinitionen schreiben, sagen Sie Behath, was das Given I am on "/news"
bedeutet. Und wenn Sie möchten, dass dieser Schritt verschiedene Dinge von Feature zu Feature bedeutet - Sie tun es falsch.
Behat besteht aus zwei Haupt- und genug getrennten Konzepten:
*.feature
Dateien, geschrieben in Gherkin Sprache. Diese Dateien sollten selbstbeschreibend sein. Bedeutet, dass sie dem Leser alle Informationen zur Verfügung stellen müssen, um sie zu verstehen. Gherkin ist keine neue Programmiersprache für Ihre Funktionstests, es ist nur ein Markdown für Ihre User-Storys! FeatureContext.php
classes, beschreibt, wie Behat Ihre Features testen sollte. Es definiert ein anwendungsweites Wörterbuch, das mit der gesamten Anwendungs-Feature-Suite verwendet werden kann. Dies ist eine Programmierbrücke zwischen Ihren Abschriften ähnlichen Benutzergeschichten und den tatsächlichen Funktionstests. Und du solltest das nicht durcheinander bringen. Einzelne Feature-Suite sollte Einzelschritte Wörterbuch (Definitionen) haben. Aber Sie können einzelne Wörterbücher in mehr als einer Feature-Suite verwenden, dank Vererbung und Unterkontexten. Und ja, Sie können einzelne Suite Wörterbuch in mehrere PHP-Klassen aufteilen ;-)