gpt4 book ai didi

Behat 3.1 - 多个上下文,找不到第二个上下文类

转载 作者:行者123 更新时间:2023-12-02 09:27:30 25 4
gpt4 key购买 nike

我有这样的behat.yml

default:
autoload:
#'': %paths.base%/tests/AppBundle/features/user_registration/bootstrap
#'': %paths.base%/tests/AppBundle/features/user_login/bootstrap
[ %paths.base%/tests/AppBundle/features/user_registration/bootstrap, %paths.base%/tests/AppBundle/features/user_login/bootstrap ]
formatters:
progress: ~
suites:
app_features:
#paths:
#features: %paths.base%/tests/AppBundle/features
paths: [ %paths.base%//tests/AppBundle/features ]
contexts:
#- tests\AppBundle\user_registration\UserRegistrationContext
- UserRegistrationContext
- UserLoginContext

#suites:
# default:
# contexts:
# - FeatureContext:
# session: '@session'
extensions:
Behat\Symfony2Extension: ~

也有这个文件夹结构:

enter image description here

使用 UserRegistrationContext 类没问题,它不会抛出错误。然后我添加了 UserLoginContext 但它找不到。

我在 composer.json 中使用 "behat/behat": "^3.1"。

behat.yml 文件与'tests'目录处于同一级别。

UserLoginContext 看起来像这样:

<?php

use Behat\Behat\Tester\Exception\PendingException;
use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;

use Behat\Mink\Driver\GoutteDriver;
use Behat\Mink\Session;


use AppBundle\Controller\UserController;


/**
* Defines application features from the specific context.
*/
class UserLoginContext implements Context, SnippetAcceptingContext
{

private $session;

/**
* Initializes context.
*
* Every scenario gets its own context instance.
* You can also pass arbitrary arguments to the
* context constructor through behat.yml.
*/
public function __construct()
{
// Choose a Mink driver. More about it in later chapters.
$driver = new GoutteDriver();
$this->session = new Session($driver);
}

}

为什么找不到 UserLoginContext?

更新

我注意到如果我这样做 - 留下一个上下文,然后找到 UserLoginContext:

default:
autoload:
#'': %paths.base%/tests/AppBundle/features/user_registration/bootstrap
'': %paths.base%/tests/AppBundle/features/user_login/bootstrap
#[ %paths.base%/tests/AppBundle/features/user_registration/bootstrap, %paths.base%/tests/AppBundle/features/user_login/bootstrap ]
formatters:
progress: ~
suites:
app_features:
#paths:
#features: %paths.base%/tests/AppBundle/features
paths: [ %paths.base%//tests/AppBundle/features ]
contexts:
#- tests\AppBundle\user_registration\UserRegistrationContext
#- UserRegistrationContext
- UserLoginContext

#suites:
# default:
# contexts:
# - FeatureContext:
# session: '@session'
extensions:
Behat\Symfony2Extension: ~

更新

我找到的临时解决方案 - 为每个上下文创建一个新的配置文件。但我想这不是它应该的样子,但仍然会展示我是如何做的:

user_login:
autoload:
'': %paths.base%/tests/AppBundle/features/user_login/bootstrap
formatters:
progress: ~
suites:
app_features:
paths: [ %paths.base%//tests/AppBundle/features ]
contexts:
- UserLoginContext
extensions:
Behat\Symfony2Extension: ~

然后使用 --profile 参数运行:

sudo vendor/behat/behat/bin/behat --profile user_login

小问题是当我想要运行所有测试时,我将不得不运行许多命令。还配置重复。仍在等待更好的解决方案。

最佳答案

在这里我注意到小文本有点帮助。

http://docs.behat.org/en/v3.0/guides/6.profiles.html

Using behat.yml to autoload will only allow for PSR-0. You can also use composer.json to autoload, which will also allow for PSR-4

真可惜——他们真的需要写更多关于这个的东西,因为新用户根本不明白如何将它与 composer.json 一起使用。

我做了什么:

  • 为与文件夹结构相同的 UserLoginContext 类添加命名空间

    命名空间 Tests\AppBundle\features\user_login\bootstrap;

  • 将此命名空间添加到 behat.yml 附近的上下文:

.

# for each context class - new profile.

default:
autoload:
'': %paths.base%/tests/AppBundle/features/user_registration/bootstrap
formatters:
progress: ~
suites:
app_features:
#paths:
#features: %paths.base%/tests/AppBundle/features
paths: [ %paths.base%//tests/AppBundle/features ]
contexts:

- UserRegistrationContext
- Tests\AppBundle\features\user_login\bootstrap\UserLoginContext

#suites:
# default:
# contexts:
# - FeatureContext:
# session: '@session'
extensions:
Behat\Symfony2Extension: ~

还有那些没有在他们的 composer.json 中的人,需要添加:

"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
  • composer dump-autoload -o

我很幸运,我有 PSR-4 的经验,可以猜出解决方案,我有时间思考和实验。

关于Behat 3.1 - 多个上下文,找不到第二个上下文类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36598315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com