是否可以在新的场景开头包含相同的几行场景?

时间:2018-01-17 09:13:12

标签: behat gherkin

我有138个测试长的场景,允许我测试工作流是否正常工作。

但是,我不是一个很大的粉丝,不必重复相同的6行,允许我以管理员身份登录,这是:

Given I am on "user/login"
And I fill in "admin@admin.com" for "name"
And I fill in "admin" for "pass"
And I press "Log in"
Then I should get a "200" HTTP response
And I should see "Dashboard"

到目前为止,我重复了这个部分6次,而且我打算再花一些时间来进行其他一些测试。

所以我的问题如下:有没有办法通过FeatureContext文件或任何其他方式使这些行重复?

提前谢谢

所以我就这样做了:

我没有一个接一个地调用Gherkin句子,而是解析了vendor/目录,找到了如何制作句子的例子。

我的功能连接我看起来如下:

/**
 * @throws ElementNotFoundException
 * @throws Exception
 * @Given I am the administrator
 */
public function iAmTheAdministrator(){

  $this->visitPath('/user/login');
  $element = $this->getSession()->getPage();
  $element->fillField('name', 'admin@admin.com');
  $element->fillField('pass', 'admin');
  $element->pressButton("Se connecter");
  $this->assertSession()->pageTextContains('Dashboard');
}

这很直接,效果很好

1 个答案:

答案 0 :(得分:2)

我知道有两种方法可以重复这些步骤。一个是后台步骤,另一个是运行步骤的片段。

后台步骤在每个场景开始时运行。

Background:
    Given I have done this
    And this other thing

Scenario: Do stuff
    When I do this
    Then stuff should happen

仅当所有测试具有相同的启动程序时才有效...

每当你打电话给我们时,

片段就会运行,我认为你更愿意

Given I have logged in as an administrator

步骤定义:

Given(/^I have logged in as an administrator$/) do
    steps %{
    Given I am on "user/login"
    And I fill in "admin@admin.com" for "name"
    And I fill in "admin" for "pass"
    And I press "Log in"
    Then I should get a "200" HTTP response
    And I should see "Dashboard"
    }
end

这允许您只使用一个步骤,您可以随时调用该步骤来执行多个步骤

希望这有帮助。