Насколько мне известно, каждый тест выполняется независимо, если вы хотите передать данные из одного теста в другой, вы можете использовать комментарий документа @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
имеет значение, пользователь фактически не вошел в систему во время этого теста, потому что все остальное (например, сеанс) будет очищено.
Чтобы убедиться, что пользователь вошел в систему, вам нужно будет смоделировать вход в систему, как показано ниже:
public function testExample()
{
$this->actingAs(User::where('email', 'admin@mail.com')->first()); //User now logged in
echo(\Auth::id());
}
Это гарантирует, что пользователь вошел в систему, а также разделит тесты.