Behat ha più opzioni per suddividere il FeatureContext in più classi. In primo luogo, è possibile utilizzare l'ereditarietà php5 vecchia scuola. Se l'ereditarietà non è ciò che desideri, Behat supporta anche i sottocontesti: "Using Subcontexts".
Successivamente, se si desidera denominare la classe in modo diverso da FeatureContext
, è possibile ridefinirlo nella sezione "Context Configuration" del proprio file di configurazione behat.yml
.
In questo modo, è possibile dividere definizioni e hook comuni in classi separate e utilizzarli in altre feature suite con il subcontesto o l'ereditarietà.
Ma la tua domanda chiede anche:
Mi piacerebbe avere un file di definizione per file funzione.
Questa richiesta è totalmente errata. Behat e Scenario BDD si occupa di descrivere il comportamento dell'applicazione in termini commerciali e creare un dizionario di test per i comportamenti descritti. Tenendo presente ciò, non è possibile avere logicamente più dizionari diversi per un set di funzionalità. Scrivendo le definizioni dei passaggi, stai dicendo a Behat cosa significa questo Given I am on "/news"
. E quando vuoi che quel passaggio significhi cose diverse da una caratteristica all'altra - stai sbagliando.
Behat si compone di 2 principali e abbastanza concetti distinti:
*.feature
file, scritti in un linguaggio Gherkin. Questi file dovrebbero essere auto-descrittivi. Significa che dovrebbero fornire tutte le informazioni per il lettore al fine di capirle. Gherkin non è un nuovo linguaggio di programmazione per i tuoi test funzionali, è solo un markdown per le tue storie di utenti!
- classi
FeatureContext.php
, descrive come Behat deve testare le funzionalità. Definisce un dizionario a livello di applicazione da utilizzare con l'intera suite di applicazioni. Questo è un ponte di programmazione tra il tuo markup , come storie utente e test funzionali reali.
E non dovresti rovinare tutto. Una singola suite di funzioni dovrebbe avere un dizionario a passi singoli (definizioni). Ma potresti usare un singolo dizionario in più di una suite di funzioni grazie all'ereditarietà e ai sottocontesti. E sì, puoi dividere il dizionario della suite singola in più classi php ;-)
Ho capito da dove vieni ma stai dimenticando il dolore di mantenere le tue specifiche? Il punto di Sfisioza (immagino) riguardava questo. Se qualcuno ha un sistema complesso, si potrebbe provare un tale dolore passando attraverso monolitici FeatureContext.php – RVM