۳ مهدی کریمیان
خطای 500 و پس نشدن تست ها
جامعه پی اچ پی ایجاد شده در ۲۳ فروردین ۱۴۰۲

مشکلات دوستانو چک کردم و همچنین پاسخ هارو و نتونستم خطارو برطرف کنم، لطفا راهنمایی بفرمایید

حتی تکه کد رو از گیت هاب امیر جان برداشتم و همچنان مشکل با پرجاست

https://github.com/mahdi-karimian/AzmoonSaz.git

سلام مهدی جان، لطفا ابتدا از خطاتون اسکرین شات بفرستید و در مورد خطایی که رخ داده توضیحات کاملتون رو مطرح کنید و همچنین کدهای مربوط به اون قسمت که خطا داده رو هم بفرستید بعد اگه نیاز بود سورس کدتون رو میفرستید.

صادق برزگر ۲۳ فروردین ۱۴۰۲، ۱۳:۱۷

ممنونم از شما

در این دو قسمتی که کامنت گذاشتم؛ بجای استاتوس کد هایی که باید، داره 500 برمیگردونه و من نمیدونم چرا

پیش از این که قسمت اضافه کردن یوزر رو اضافه کنم به کد، تکت تستی که وجود داشت پس میشد، ولی بعد از اون نمیدونم چی شد که نشد

و این که به کامیت قبل هم که برمیگردم همچنان تست‌ها فیلد میشن

تصویر خطارو اتچ کردم

کد مربوط به قسمت کنترلر یوزر

?php
namespace App\\Http\\Controllers\\API\\V1;
use App\\Http\\Controllers\\Controller;
use App\\repositories\\Contracts\\UserRepositoryInterface;
use http\\Env\\Request;
class UsersController extends Controller
{
    public function __construct(private UserRepositoryInterface $userRepository)
    {
    }
    public function store(Request $request)
    {
        $this->validate($request, [
            'full_name' => 'required|string|min:3|max:255',
            'email' => 'required|email',
            'mobile' => 'required|string',
            'password' => 'required',
        ]);
        $this->userRepository->create($request->toArray());
        return response()->json(
            [
                'success' => true,
                'message' => 'created User Successfully',
                'data' => [
                    'full_name' => 'mahdi karimian',
                    'email' => 'karimian@gmail.com',
                    'mobile' => '09129120912',
                    'password' => '1234',
                ],
            ]
        )->setStatusCode(201);
    }
}

کد مربوط به قسمت تست=>

namespace Tests\\api\\v1\\Users;
require 'vendor/autoload.php';
//use PHPUnit\\Framework\\TestCase;
use Tests\\TestCase;
class UsersTest extends TestCase
{
    public function test_should_create_a_new_user()
    {
        $response = $this->call('POST', 'api/v1/users', [
            'Full_name' => 'mahdi karimian',
            'email' => 'karimian@gmail.com',
            'mobile' => '09129120912',
            'password' => '1234',
        ]);
        $this->assertEquals(201, $response->status());      //status code 500 is returned
        $this->seeJsonStructure([
            'success',
            'message',
            'data' => [
                'full_name',
                'email',
                'mobile',
                'password',
            ],
        ]);
    }
    public function test_it_must_throw_a_exception_if_we_dont_send_response()
    {
        $response = $this->call('POST', 'api/v1/users',[]);
        $this->assertEquals(422,$response->status());        //status code 500 is returned
    }
}
مهدی کریمیان ۲۳ فروردین ۱۴۰۲، ۱۳:۲۸

سلام مهدی عزیز

به نظر می‌رسد که در قسمت کنترلر

use http\\Env\\Request;

به جای

use Illuminate\\Http\\Request

استفاده شده است؛ بنابراین کلاس Request صحیح به کنترلر شما تزریق نمی‌شود و از این رو متد validate کار نمی‌کند و خطا به وجود می‌آید.

برای رفع این مشکل،

use Illuminate\\Http\\Request;

را به کنترلر اضافه و استفاده کنید.

همچنین، در کد تست، نام فیلد Full_name درخواست را با حرف بزرگ نوشته‌اید در حالی که نام فیلد در کنترلر با حرف کوچک full_name است. لذا نام فیلد را با حروف کوچک در تست نوشته و امتحان کنید.

در ضمن، بهتر است از متد json به جای toArray در کنترلر برای تبدیل درخواست به آرایه استفاده کنید، چرا که توابع دیگر مانند create ممکن است برای ورودی جیسون طراحی شده باشند. در نتیجه، کد کنترلر به صورت زیر خواهد بود:

public function store(Request $request)
{
    $this->validate($request, [
        'full_name' => 'required|string|min:3|max:255',
        'email' => 'required|email',
        'mobile' => 'required|string',
        'password' => 'required',
    ]);
    $this->userRepository->create($request->json()->all());
    return response()->json([
        'success' => true,
        'message' => 'created User Successfully',
        'data' => [
            'full_name' => 'mahdi karimian',
            'email' => 'karimian@gmail.com',
            'mobile' => '09129120912',
            'password' => '1234',
        ],
    ])->setStatusCode(201);
}


احمدرضا فاطمی کیا ۲۳ فروردین ۱۴۰۲، ۱۶:۳۳