Behat 3 - 找不到并且无法使用的“FeatureContext”上下文类

时间:2014-10-30 16:35:34

标签: php composer-php autoload behat

我过去曾尝试过Behat 2.5并且没有设置问题,但现在我刚刚下载了Behat 3,我在设置它时遇到了一些困难。

我的问题是,在全新安装后,如果我创建了一个behat.yml文件,我似乎无法定义FeatureContext文件的位置,而且我无法运行任何测试。

我的composer.json如下:

{
"require-dev": {
    "behat/behat": "~3.0.4",
    "sensiolabs/behat-page-object-extension": "2.0.*@dev"
},
"require": {
    "behat/mink": "1.6.*",
"behat/mink-goutte-driver": "*",
    "behat/mink-selenium2-driver": "*"
}

}

我的项目文件夹的结构如下:

behat/
  bootstrap/
    FeatureContext.php
  config/
    behat.yml
  features/
    CheckHome.feature
  vendor/
  composer.json
  composer.lock

我的behat.yml文件:

default:
  autoload:
    '': %paths.base%/../bootstrap
  suites:
    default:
      paths:
        - %paths.base%/../features
      contexts:
        - FeatureContext

当我尝试使用

在CheckHome.feature中运行场景时
vendor/bin/behat

我收到以下错误:

Behat\Behat\Context\Exception\ContextNotFoundException]
`FeatureContext` context class not found and can not be used.

设置自动加载的正确方法是什么,以便识别我的上下文?

由于

2 个答案:

答案 0 :(得分:3)

你不需要像那样写它。它适用于我:

# behat.yml
default:
    autoload: [ %paths.base%/contexts ]
    extensions:
        Behat\MinkExtension:
            base_url: http://www.google.com
            sessions:
                default:
                    selenium2: ~
        Sanpi\Behatch\Extension: ~
    suites:
        default:
            paths:    [ %paths.base%/features ]
            filters:
            contexts:
                - FeatureContext

请注意,我没有必要将它放在新行上或将其视为关联数组。我将我的上下文从root中的“​​contexts”目录更改为自动加载。我觉得它有点令人讨厌,它是“功能”下的子文件夹,默认情况下该文件夹被称为“bootstrap”而不是“contexts”。

我希望Behat 3.x有更好的记录。您甚至无法在任何地方的代码中清楚地找到这些信息。

答案 1 :(得分:1)

我修好了。我假设基本路径是我的目录的根目录,但它是存储behat.yml的地方。因此,为了使用我当前的配置,我必须更改behat.yml文件中的路径,如下所示:

default:
  autoload:
    '': %paths.base%/../bootstrap
  suites:
    default:
      paths:
        - %paths.base%/../features
    contexts:
        - FeatureContext