gpt4 book ai didi

symfony - Behat 验证 Symfony2 用户

转载 作者:行者123 更新时间:2023-12-04 00:39:58 31 4
gpt4 key购买 nike

我在 Symfony2/Doctrine2 中使用 Behat。现在,我将这种情况归结为“如果我已登录并转到/login,我应该转到/”这一事实:

@login
Scenario: Go to the login page while being logged in
Given I am logged in
When I go to "/login"
Then I should be on "/"

对于@login,我创建了以下内容:
/**
* @BeforeScenario @login
*/
public function loginUser()
{
$doctrine = $this->getContainer()->get('doctrine');
$userRepository = $doctrine->getRepository('MyTestBundle:User');
$user = $userRepository->find(1); // 1 = id

$token = new UsernamePasswordToken($user, NULL, 'main', $user->getRoles());
$this->getContainer()->get('security.context')->setToken($token);
}

在“当我转到/登录时”代码( Controller 被调用)中, token 似乎消失了(不是我想要的):
/**
* @Route("/login", name="login")
*/
public function loginAction()
{
$token = $this->get('security.context')->getToken();
$fd = fopen('/tmp/debug.log', 'a');
fwrite($fd, $token);

// prints 'AnonymousToken(user="anon.", authenticated=true, roles="")'
...

但是在 FeatureContext 中,它似乎仍然存在(我希望它会起作用的方式)。在“鉴于我已登录”中:
/**
* @Given /^I am logged in$/
*/
public function iAmLoggedIn()
{
$token = $this->getContainer()->get('security.context')->getToken();
$fd = fopen('/tmp/debug.log', 'a');
fwrite($fd, $token);

// prints 'UsernamePasswordToken(user="admin", authenticated=true, roles="ROLE_ADMIN")'
...

我像这样运行 behat:
app/console -e=test behat

我也在 Controller 中做了这个以确保它是测试:
fwrite($fd, $this->get('kernel')->getEnvironment());
// prints 'test'

任何线索如何验证用户?我将不得不测试很多管理页面,所以如果我可以将登录连接到 @BeforeSuite、@BeforeFeature(或 @BeforeScenario ...),这样我就不会被阻止,那就太好了。

(也欢迎提供有关禁用测试身份验证机制或 stub /模拟用户的方法的建议。)

最佳答案

哦,我的。它不起作用,因为您的 FeatureContext 中的 DIC 未与您的应用程序共享 - 您的应用程序具有单独的内核和 DIC。您可以通过 Mink 获得它。或者,您可以简单地以正确的方式进行:-)

正确的方式意味着,最终用户可以观察到的每一部分行为都应该在 *.feature 中描述,而不是在 FeatureContext 中。这意味着,如果你想登录一个用户,你应该简单地用步骤来描述它(比如:“我在/登录”,“我填写用户名......”,“我填写密码”和stuf) .如果你想多次这样做 - 你应该创建一个元步骤。

Metasteps 只是描述多个其他步骤的简单步骤,例如 - “我以 everzet 身份登录”。你可以在这里阅读它们:http://docs.behat.org/guides/2.definitions.html#step-execution-chaining

关于symfony - Behat 验证 Symfony2 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8108001/

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