如何通过请求phpunit发送一个对象

How to send an object through request phpunit

您好,我是 Laravel 和 PHP 的新手。 这是我的学生模型的控制器

{
    public function create(Request $request){

        $student = new Student();
        $student->fname = $request->fname;
        $student->lname = $request->lname;
        $student->dob = $request->dob;
        $student->address = $request->address;
        $student->course = $request->course;
        $student->year = $request->year;

        $student->save();

        return redirect('/');
    }
}

这是我写的单元测试,基本上只是把一个对象放在请求中,然后使用我写的控制器实例将它添加到数据库中(我不知道这是不是最好的方法它)。

class AddStudTest extends TestCase
{   

    use refreshdatabase;

    /**
     * A basic feature test example.
     *
     * @return void
     */

    public function test_addStud()
    {   
        
        $test = new Models\Student; 
        $test->fname = 'Test';
        $test->lname ='User';
        $test->dob ='2000-04-05';
        $test->address ='test address';
        $test->course ='BS Tester';
        $test->year ='1';
        
        $request = new Request(compact($test));
        $testController = new Http\Controllers\StudentController;
        $testController->create($request);
       
        $this->assertDatabaseHas('students',[
            'fname'=>'Test',
            'lname'=>'User',
            'dob'=>'2000-04-05',
            'address'=>'test address',
            'course'=>'BS Tester',
            'year'=>'1'
        ]);
    }
}

当我 运行 phpunit 时,它说:


1) App\AddStudTest::test_addStud
Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'fname' cannot be null (SQL: insert into `students` (`fname`, `lname`, `dob`, `address`, `course`, `year`) values (?, ?, ?, ?, ?, ?))

如何让它读取我放入请求中的对象?如果有更好的方法,希望有人能指导我。

我的错!我只需要发送带有键的数组数据,而不仅仅是值。

 $test = array('fname'=>'Test','lname'=>'User','dob'=>'2000-04-05','address'=>'test address','course'=>'BS Tester','year'=>'1');

不过,如果有更好的方法,我会很乐意接受。