自定义步骤中的Behat3重定向

时间:2015-04-09 09:27:46

标签: behat

我正在尝试从自定义步骤中重定向到网址。这是可行的2.x通过:

return new Step\Then("my/url/page");

很遗憾,您无法在behat 3.0中的自定义步骤中调用外部步骤!

如何在自定义步骤中执行重定向?

1 个答案:

答案 0 :(得分:1)

从Behat 3中移除了步骤链,因为它被认为是一种不好的做法。

作为explained by everzet

  

使用代码工具,如抽象,组合和继承以及简单的方法调用:)链式步骤是一种反模式。很难调试和维护它们。在大多数情况下,使用1-2个方法调用可以完成2-3个链接步骤。

here

  

因为只要你开始这样做:

     
      
  1. 无法重构您的上下文
  2.   
  3. 无法清楚地看到代码实际执行的内容
  4.   
  5. 无法轻易改写您的功能
  6.         

    如果您认为使用内联步骤更容易:

return array(
    new Step\Given(‘I am on the homepage’),
    new Step\When(‘I follow ”Login”’),
    new Step\When(‘I fill ”Username” with “‘ . $username . '"’),
    new Step\When(‘I fill ”Password” with “‘ . $password . '"’),
    new Step\When(‘I click “Login"’),
);
  

不是:

$session = $this->getSession();
$page = $session->getPage();

$session->visit($this->locateUrl(‘/‘));
$page->clickLink(‘Login’);
$page->fillField(‘Username’, $username);
$page->fillField(‘Password’, $password);
$page->pressButton(‘Login’);

另见https://github.com/Behat/Behat/issues/546

Behat 3有一个带有步骤链实现的扩展,但它已被破坏,它不太可能得到官方支持:https://github.com/Behat/ChainedStepsExtension

<强>解决方案

要解决您的问题,您可以扩展Behat\MinkExtension\Context\RawMinkContext并使用它来访问会话:

$this->getSession()->visitPath('my/url/page');

您还可以查看the page object extension