我过去尝试过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
我得到以下错误:
BehatBehatContextExceptionContextNotFoundException]
`FeatureContext` context class not found and can not be used.
设置自动加载以便识别我的上下文的正确方法是什么?
感谢
我修复了它。我假设基本路径是我的目录根,但它是behat.yml存储的地方。因此,为了使用我当前的配置,我必须更改behat.yml文件中的路径,如下所示:
default:
autoload:
'': %paths.base%/../bootstrap
suites:
default:
paths:
- %paths.base%/../features
contexts:
- FeatureContext
您不需要像那样编写它。它适用于以下内容:
# behat.yml
default:
autoload: [ %paths.base%/contexts ]
extensions:
BehatMinkExtension:
base_url: http://www.google.com
sessions:
default:
selenium2: ~
SanpiBehatchExtension: ~
suites:
default:
paths: [ %paths.base%/features ]
filters:
contexts:
- FeatureContext
请注意,我不必将它放在新行上,也不必将其视为关联数组。我将上下文更改为从根目录中的"contexts"目录自动加载。我觉得这有点烦人,因为它是"功能"下的一个子文件夹,而且默认情况下该文件夹被称为"引导"而不是"上下文"。
我希望Behat 3.x有更好的文档记录。您甚至无法在任何地方的代码中清楚地找到这些信息。