默认情况下,Behat 在名为 FeatureContext
的文件中查找步骤定义(所有步骤都在一个文件中)。
步骤多,维护这么大的文件很困难。
我希望每个功能文件有一个定义文件。
如何在外部文件中定义步骤?
例如
homepage.feature
HomepageContext extends FeatureContext
最佳答案
Behat 有多个选项供您将 FeatureContext 拆分为多个类。首先,您可以使用老式的 php5 继承。如果继承不是您想要的,Behat 还支持子上下文:“Using Subcontexts ”。
接下来,如果您想要以不同于 FeatureContext
的方式命名您的类,您可以在 behat.yml
配置文件的“Context Configuration”部分重新定义它。
这样,您可以将通用定义和 Hook 拆分为单独的类,并在其他功能套件中使用它们以及子上下文或继承。
但是你的问题还问:
I'd like to have one definition file per feature file.
这个要求是完全错误的。 Behat and Scenario BDD 就是用业务术语描述您的应用程序行为,并为描述的行为创建测试字典。请记住这一点,从逻辑上讲,您不能为一个功能集使用多个不同的词典。通过编写步骤定义,您告诉 Behat Given I am on "/news"
是什么意思。如果您希望该步骤对不同的功能具有不同的含义,那么您就错了。
Behat 由 2 个主要且足够独立的概念组成:
*.feature
文件,用 Gherkin 语言编写。这些文件应该是 self 描述的。意思是,他们应该为读者提供所有信息以便理解他们。 Gherkin 不是用于功能测试的新编程语言,它只是用户故事的markdown!FeatureContext.php
类,描述 Behat 应如何测试您的功能。它定义了与整个应用程序功能套件一起使用的应用程序范围的字典。这是您的 markdown 类用户故事和实际功能测试之间的编程桥梁。
而且你不应该把事情搞砸。单功能套件应该有单步字典(定义)。但是由于继承和子上下文,您可以在多个功能套件中使用单个字典。是的,您可以将单个套件字典拆分为多个 php 类;-)
关于php - Behat 外部文件中的步骤定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377898/