gpt4 book ai didi

php - 在单元测试 Laravel 期间保存变量

转载 作者:行者123 更新时间:2023-12-05 08:52:53 25 4
gpt4 key购买 nike

变量 $this->id 在另一个函数中不可见 testExemple

如果我将这个变量传递给一个不在“测试”上启动的普通函数,而不是传递给测试函数,一切都会正常。

我能以某种方式解决这个问题吗?

class LoginTest extends TestCase
{
protected $id;
public function testLogin()
{
$response = $this->json('post', 'auth/login',
['email' => 'admin@mail.com', 'password' => '12345678'])
->assertJsonStructure(['data' => ['id', 'name', 'email']]);

$response->assertStatus(201);

$userData = $response->getContent();
$userData = json_decode($userData, true);
$this->id = $userData['data']['id'];
}
public function testExemple()
{
echo($this->id);
}
}

最佳答案

据我所知,每个测试都是独立运行的,如果你想将数据从一个测试传递到另一个测试,你可以使用 @depends 文档注释,如下所示:

class LoginTest extends TestCase
{
public function testLogin()
{
$response = $this->json('post', 'auth/login',
['email' => 'admin@mail.com', 'password' => '12345678'])
->assertJsonStructure(['data' => ['id', 'name', 'email']]);

$response->assertStatus(201);

$userData = $response->getContent();
$userData = json_decode($userData, true);
return $userData['data']['id']; //Return this for the dependent tests
}

/**
* @depends testLogin
*/
public function testExample($id)
{
echo($id);
}
}

然而,您可能会遇到的问题是,虽然 $id 有一个值,但用户在此测试期间并未实际登录,因为其他所有内容(例如 session )都将被清除。

为了确保用户已登录,您需要像下面这样模拟用户登录:

    public function testExample()
{
$this->actingAs(User::where('email', 'admin@mail.com')->first()); //User now logged in
echo(\Auth::id());
}

这确保用户已登录并解耦测试。

关于php - 在单元测试 Laravel 期间保存变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256481/

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