默认情况下,behat在名为FeatureContext的文件中查找步骤定义(一个文件中的所有步骤)。
有很多步骤,很难维护这么大的文件。

我希望每个功能文件有一个定义文件。

如何在外部文件中具有步骤定义?

例如 通用标签

有帮助吗?

解决方案

使用类继承和单独的上下文。 通用标签

然后使用/feature/FeatureContext.php导入上下文文件: 通用标签

其他提示

Behat有多个选项供您将FeatureContext拆分为多个类。首先,您可以使用老式的php5继承。如果继承不是您想要的继承,则Behat还支持子上下文:“ 使用子上下文”。

接下来,如果您要使用与FeatureContext不同的名称来命名类,则可以在“ 您的behat.yml配置文件的“上下文配置” ”部分。

通过这种方式,您可以将常见的定义和钩子拆分为单独的类,并在其他功能套件中以及子上下文或继承中使用它们。

但是您的问题还问:

我希望每个功能文件有一个定义文件。

此请求是完全错误的。 Behat和Scenario BDD都是以业务术语描述应用程序行为,并为所描述的行为创建测试字典。请记住,在逻辑上,一个功能集不能有多个不同的字典。通过编写步骤定义,您可以告诉Behat遗传基因标签代码的含义。而当您希望该步骤在功能与功能之间具有不同的含义时-您做错了。

Behat由2个主要且足够的独立概念组成:

  1. Given I am on "/news"文件,用小黄瓜语言编写。这些文件应该是自我描述的。意思是说,它们应该为读者提供所有信息以便理解它们。对于您的功能测试,Gherkin并不是一种新的编程语言,它只是您的用户故事的一个降价
  2. *.feature类,描述Behat应该如何测试您的功能。它定义了与整个应用程序功能套件一起使用的应用程序范围的词典。这是您的降价类用户故事和实际功能测试之间的编程桥梁。

    而且您不应该弄乱这些东西。单功能套件应具有单步字典(定义)。但是由于继承和子上下文,您可以在多个功能套件中使用单个字典。是的,您可以将单个套件字典拆分为多个php类;-)

One solution is horizontal reusability with subContexts. Use a subContext for each "feature group".

class FeatureContext extends BehatContext
{

    public function __construct(array $context_parameters)
    {
        $this->useContext('math_context', new MathContext());
        $this->useContext('bash_context', new BashContext());
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top