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 "([^"]*)"$/
*/
请注意唯一的区别是密码中的 * "([^"]*)"$/
我对 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 "([^"]*)"$/
*/
请注意唯一的区别是密码中的 * "([^"]*)"$/