如何通过请求phpunit发送对象

Posted

技术标签:

【中文标题】如何通过请求phpunit发送对象【英文标题】:How to send an object through request phpunit 【发布时间】:2021-07-23 16:47:53 【问题描述】:

您好,我是 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 (?, ?, ?, ?, ?, ?))

如何让它读取我在请求中放入的对象?如果有更好的方法,我希望有人可以教育我。

【问题讨论】:

【参考方案1】:

我的错!我只需要用键而不是值来发送数组数据。

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

不过,如果有更好的方法来做到这一点,我很乐意接受。

【讨论】:

以上是关于如何通过请求phpunit发送对象的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 - 避免在 phpunit 测试中发送松弛通知

使用 PHPUnit 模拟 PDO 对象

如何通过 PEAR 安装旧版本的 PHPUnit?

看不到响应获取请求 laravel phpunit

如何让 PHPUnit 运行所有的测试?

无法发送会话 cookie - 标头已发送 PHPUnit / Laravel