【问题标题】:how (where) to define a feature step in Behat/Mink如何(在哪里)在 Behat/Mink 中定义特征步骤
【发布时间】:2013-08-31 10:42:18
【问题描述】:

我在为 Behat 中的 BDD 功能和 Yii 框架中的 Mink 设置定义自己的步骤时遇到了问题。

我已经按照MinkExtension-example 的说明成功安装了带有 Mink 扩展的 Behat。

毕竟,我在 myapp/private_html/ 中的文件夹结构如下(省略了一些深度嵌套的文件夹):

├───bin
├───commands
│   └───shell
├───components
├───config
├───controllers
├───features
│   ├───bootstrap
│   └───php54_bootstrap
├───models
├───tests
├───vendor
│   ├───behat
│   │   ├───behat
│   │   │   ├───bin
│   │   │   ├───features
│   │   │   │   ├───annotations
│   │   │   │   ├───bootstrap
│   │   │   │   └───closures
└───views

上述链接MinkExtension-example 中作为示例提供的功能可以正常工作。但是当我定义自己的步骤时,就像

  Scenario: presence of menu items
    Given I am on "/"
    Then I should see the following: "Home, About, Contact"

我明白了

1 scenario (1 undefined)
2 steps (1 passed, 1 undefined)
0m2.288s

有建议

You can implement step definitions for undefined steps with these snippets:

/**
 * @Then /^I should see the following: "([^"]*)"$/
 */
public function iShouldSeeTheFollowing($arg1)
{
    throw new PendingException();
}

问题是:我应该把这段代码放在哪里?我试着把它放进去

myapp\private_html\features\bootstrap\FeatureContext.php

还有

myapp\private_html\vendor\behat\behat\features\bootstrap\FeatureContext.php 

但该步骤仍未定义。

那么,应该在哪里定义步骤?

【问题讨论】:

    标签: yii bdd behat mink


    【解决方案1】:

    您永远不必更改供应商的代码(我想您正在使用作曲家)。不是你的代码。

    您的代码必须添加到 features\bootstrap\FeatureContext.php。

    也许问题在于您的 FeatureContext 类没有扩展 MinkContext 而是 BehatContext。您会在 FeatureContext 的文件中找到注释。将 FeatureContext 的父类从 BehatContext 更改为 MinkContext。

    最后,要查看上下文可以看到的所有句子,请运行“./bin/behat -dl”。如果在更改 Context 之前运行此命令,可以看到 behat 的语句很少。

    【讨论】:

    • 您说 vendorbin 这两个文件夹是公开的,尽管它们位于 private_html 文件夹中?我将尝试向您提供有关将步骤定义添加到文件 features\bootstrap\FeatureContext.php. 的建议
    • 不抱歉。我已经删除了那部分答案。
    • 我尝试将我的步骤添加到 features\bootstrap\FeatureContext.php 和以前一样,该步骤仍未定义。确实,我不明白你提到的上下文的想法,但我尝试做一些事情:1.首先尝试添加 $this->useContext('mink', new MinkContext()); 进入构造函数 - 但没有任何改变 2. 然后我添加了 use Behat\MinkExtension\Context\MinkContext; - 再次没有任何改变。顺便说一句,将 FeatureContext 的父文件夹从 BehatContext 更改为 MinkContext 是什么意思?
    • 当然,我运行./bin/behat -dl时不会显示该步骤
    • 对不起:我的意思是,...父类。
    【解决方案2】:

    如果您想查看 behat mink 的预定义步骤和功能。

    vendor/bin/behat -dl 
    

    您将看到可用于您的网站的步骤。

    现在已经有一个步骤可以使用了

    Scenario: presence of menu items
     Given I am on "/"
     Then I should see "Home, About, Contact"
     Theres nothing like "Then I should see following".
    

    【讨论】:

    • 你是绝对正确的,然后我应该看到以下不在预定义的步骤中。这正是我想在我的 FeatureContext 文件中定义它的原因。
    • 复制所有给定的 sn-p,包括 features/bootstrap/FeatureContext.php 文件下的 cmets。你在抄袭吗?
    • 没错,我已经复制了所有内容。该步骤仍未定义。我想这是由于我在示例中使用的 behat.yml 文件中的设置造成的。
    • 嗯,我认为“Home、About、Contact”中的逗号可能不起作用。因为如果你专注于函数它只传递一个参数($arg1)。所以绝对必须与您声明的论点有关。您希望在页面上找到 3 件事:主页、关于、联系方式。但该函数只传递一个参数。明白了吗??
    • 从一开始就很明显,即这一事实是创建一个新步骤的原因,我称之为Then I should see the following: "....."。问题是即使我在 FeatureContext 中明确定义了这一步,它仍然没有定义。抱歉,如果我在发布问题时不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多