Behat 3 + Symfony 3 Context with namespace 在没有工作时不起作用
Behat 3 + Symfony 3 Context with namespace doesn't work, when without works
我有以下 目录结构:
composer.json
behat.yml
src
|--AppBundle
|--Features
|--example.feature
|--Context
|--FeatureContext.php
以及下面的behat.yml
default:
autoload:
'': 'src/AppBundle/Features/Context'
suites:
default:
paths: ['src/AppBundle/Features']
contexts:
- FeatureContext:
session: '@session'
# and extensions standard for Symphony
并且FeatureContext.php包含
<?php
//namespace AppBundle\Features\Context;
use Behat\Behat\Context\Context;
use Behat\MinkExtension\Context\MinkContext;
/**
* Defines application features from the specific context.
*/
class FeatureContext extends MinkContext implements Context
{ ... }
有评论命名空间。当我 运行 behat 时,现在可以正确找到上下文。当我取消注释 namespace 时出现错误:
[Behat\Behat\Context\Exception\ContextNotFoundException]
FeatureContext
context class not found and can not be used.
如何在FeatureContext.php中的namespace取消注释时使其工作?我对 PSR-0 和 PSR-4 了解不多,但如果问题可以与此相关联,我会附加 composer.json.
的片段
"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
},
我正在寻找编码的最佳实践,所以如果我做的事情不好,我会投票赞成适当的建议。
- 我似乎应该在 FeatureContext.php 中包含 namespace,不是吗?
- 我似乎不应该在 composer.json 中使用 PSR-0,对吧?
看看下面的例子。完整的例子在这里:http://www.inanzzz.com/index.php/post/l41o/testing-a-basic-auth-symfony-api-with-behat3 You can also find more behat examples here: http://www.inanzzz.com/index.php/posts/behat
注意 1:您可以直接访问上下文文件中的 session
,因此无需注入它。您可能需要使用 implements KernelAwareContext
或 implements KernelAwareInterface
或 implements ContainerAwareInterface
。只需查看上面的博文。
注意 2:您根本不需要 composer.sjon 中的 autoload-dev
。摆脱它。
composer.json
注意:使用新版本!
{
"require-dev": {
"behat/behat": "3.0.15",
"behat/symfony2-extension": "2.1.0",
"behat/mink": "1.7.0",
"behat/mink-extension": "2.1.0",
"behat/mink-browserkit-driver": "1.3.0"
},
}
behat.yml
default:
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://your_local_app_domain.com/app_test.php/
sessions:
symfony2:
symfony2: ~
suites:
api:
type: symfony_bundle
bundle: ApplicationApiBundle
mink_session: symfony2
contexts:
- Application\ApiBundle\Features\Context\FeatureContext:
param: 'whatever'
FeatureContext.php
namespace Application\ApiBundle\Features\Context;
use Behat\MinkExtension\Context\MinkContext;
class FeatureContext extends MinkContext
{
private $param;
public function __construct($param)
{
$this->param = $param;
}
......
}
测试
$ bin/behat --suite=api @ApplicationApiBundle/YourFeature.feature
我有以下 目录结构:
composer.json
behat.yml
src
|--AppBundle
|--Features
|--example.feature
|--Context
|--FeatureContext.php
以及下面的behat.yml
default:
autoload:
'': 'src/AppBundle/Features/Context'
suites:
default:
paths: ['src/AppBundle/Features']
contexts:
- FeatureContext:
session: '@session'
# and extensions standard for Symphony
并且FeatureContext.php包含
<?php
//namespace AppBundle\Features\Context;
use Behat\Behat\Context\Context;
use Behat\MinkExtension\Context\MinkContext;
/**
* Defines application features from the specific context.
*/
class FeatureContext extends MinkContext implements Context
{ ... }
有评论命名空间。当我 运行 behat 时,现在可以正确找到上下文。当我取消注释 namespace 时出现错误:
[Behat\Behat\Context\Exception\ContextNotFoundException]
FeatureContext
context class not found and can not be used.
如何在FeatureContext.php中的namespace取消注释时使其工作?我对 PSR-0 和 PSR-4 了解不多,但如果问题可以与此相关联,我会附加 composer.json.
的片段"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
},
我正在寻找编码的最佳实践,所以如果我做的事情不好,我会投票赞成适当的建议。
- 我似乎应该在 FeatureContext.php 中包含 namespace,不是吗?
- 我似乎不应该在 composer.json 中使用 PSR-0,对吧?
看看下面的例子。完整的例子在这里:http://www.inanzzz.com/index.php/post/l41o/testing-a-basic-auth-symfony-api-with-behat3 You can also find more behat examples here: http://www.inanzzz.com/index.php/posts/behat
注意 1:您可以直接访问上下文文件中的 session
,因此无需注入它。您可能需要使用 implements KernelAwareContext
或 implements KernelAwareInterface
或 implements ContainerAwareInterface
。只需查看上面的博文。
注意 2:您根本不需要 composer.sjon 中的 autoload-dev
。摆脱它。
composer.json
注意:使用新版本!
{
"require-dev": {
"behat/behat": "3.0.15",
"behat/symfony2-extension": "2.1.0",
"behat/mink": "1.7.0",
"behat/mink-extension": "2.1.0",
"behat/mink-browserkit-driver": "1.3.0"
},
}
behat.yml
default:
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://your_local_app_domain.com/app_test.php/
sessions:
symfony2:
symfony2: ~
suites:
api:
type: symfony_bundle
bundle: ApplicationApiBundle
mink_session: symfony2
contexts:
- Application\ApiBundle\Features\Context\FeatureContext:
param: 'whatever'
FeatureContext.php
namespace Application\ApiBundle\Features\Context;
use Behat\MinkExtension\Context\MinkContext;
class FeatureContext extends MinkContext
{
private $param;
public function __construct($param)
{
$this->param = $param;
}
......
}
测试
$ bin/behat --suite=api @ApplicationApiBundle/YourFeature.feature