Behat 无法识别定义的步骤

Behat does not recognize a defined step

我对 Behat 和 Mink 有疑问。当 运行ning 时,系统提示我在函数声明中添加 #2。

这是我的版本信息作曲文件

{
   "require": {
       "behat/behat": "2.5.*@stable",
       "behat/mink": "~1.6",
       "behat/mink-extension": "~1.0",
       "behat/mink-goutte-driver": "~1.1",
       "fabpot/goutte": "~1.0.4",
       "behat/mink-selenium2-driver": "*"
   },
   "config": {
       "bin-dir": "bin/"
   }
}

这是我的步骤定义

Given the user "XXX" has logged in using the password "YYYYY"

我在 FeatureContext.php

中创建了一个处理程序
/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"])"$/
 */
public function theUserHasLoggedInUsingThePassword($arg1, $arg2)
{
  ...
}

当我 运行 收到消息时

您可以使用这些代码段为未定义的步骤实施步骤定义:

/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"])"$/
 */
public function theUserHasLoggedInUsingThePassword2($arg1, $arg2)
{
    $this->theUserHasLoggedInUsingThePassword($arg1,$arg2);
}

注意添加到代码段中的#2

然后当我添加这个片段时

/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"])"$/
 */
public function theUserHasLoggedInUsingThePassword2($arg1, $arg2)
{
    throw new PendingException();
}

在 FeatureContext.php 中同时拥有 theUserHasLoggedInUsingThePassword 和 theUserHasLoggedInUsingThePassword2 函数,我收到

[Behat\Behat\Exception\RedundantException]

Step "/^I have logged in with the user "([^"]*)" and the password "([^"])"$/" is already defined in FeatureContext::iHaveLoggedInWithTheUserAndThePassword2()

FeatureContext::iHaveLoggedInWithTheUserAndThePassword2()

FeatureContext::iHaveLoggedInWithTheUserAndThePassword()

我觉得我遇到的 RedundantException 是一个转移注意力的问题,真正的问题是我需要添加带有 2 的函数。

有人看到我遗漏了什么吗?

删除第一个片段并使用第二个片段,抛出异常是因为正则表达式被定义了两次。方法名称无关紧要。然而,它第一次没有工作是没有意义的......

从头开始,执行以下操作看看会发生什么:

缓存

app/console cache:clear
app/console cache:clear --env=test  (I guess you have test environment!)

作曲家

"require-dev": {
        "behat/behat": "2.5.5",
        "behat/mink-extension": "1.3.3",
        "behat/mink": "1.5.0",
        "behat/symfony2-extension": "1.1.2",
        "behat/mink-selenium2-driver": "1.1.1",
        "behat/mink-browserkit-driver": "1.1.0",
        "behat/mink-goutte-driver": "1.0.9",

        "guzzle/guzzle": "3.9.2"
}

步骤

When test login "hello" "word"

FeatureContext

class FeatureContext extends MinkContext implements KernelAwareInterface
{
    /**
     * @When /^test login "([^"]*)" "([^"]*)"$/
     */
    public function testLogin($uid, $psw)
    {
        echo 'Step works fine';
    }
}

经过几个小时的研究,我发现这是一个简单的 typo/cut 和粘贴问题。

所以问题实际上是在正则表达式语法中。

/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"])"$/
 */

我正在使用 Visual Studio(PHP 开发工具)在 wimp 堆栈中执行此操作,并且我 运行 通过命令行执行此操作。在命令行上生成的输出如下所示

    /**
     * @Given /^the user "([^"]*)" has logged in using the password "([^"]
*)"$/
     */

将其粘贴到 Visual Studio 后,最后一个正则表达式组中的 * 会捕捉到块注释。

/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"]
 *)"$/
 */

所以我误以为最后一场比赛中的 * 是评论 * 而不是正则表达式的一部分。这导致了我的代码段上方的以下行。

/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"])"$/
 */

而不是

/**
 * @Given /^the user "([^"]*)" has logged in using the password "([^"]*)"$/
 */

请注意唯一的区别是密码中的 * "([^"]*)"$/