PHPUnit - 发布到现有控制器不会返回错误

时间:2018-01-29 10:57:28

标签: laravel unit-testing phpunit laravel-5.4 laravel-5.5

我是PHPUnit和TDD的新手。我只是在安装了phpunit 6.5.5的情况下将我的项目从Laravel 5.4升级到5.5。在学习过程中,我写了这个测试:

/** @test */
public function it_assigns_an_employee_to_a_group() {
    $group = factory(Group::class)->create();

    $employee = factory(Employee::class)->create();

    $this->post(route('employee.manage.group', $employee), [
        'groups' => [$group->id]
    ]);

    $this->assertEquals(1, $employee->groups);
}

我在web.php文件中有一个看起来像这样的定义路由

Route::post('{employee}/manage/groups', 'ManageEmployeeController@group')
    ->name('employee.manage.group');

我还没有创建ManageEmployeeController,当我运行测试时,没有收到错误告诉我控制器不存在,我收到此错误

  

声明null匹配预期值1失败。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可能没有在控制器中创建方法,但这并不意味着您的测试将停止。
测试运行。它会调用您的终端。它返回404状态,因为找不到控制器中的方法 然后你做一个断言,因为你的帖子请求会失败 没有成功,也没有为您的员工创建任何组。

只需添加状态声明$response->assertStatus(code)
$response->assetSuccessful()

答案 1 :(得分:0)

Laravel会自动处理该异常,因此我使用

禁用了它
$this->withoutExceptionHandling();

测试方法现在看起来像这样:

/** @test */
public function it_assigns_an_employee_to_a_group() {

    //Disable exception handling
    $this->withoutExceptionHandling();

    $group = factory(Group::class)->create();

    $employee = factory(Employee::class)->create();

    $this->post(route('employee.manage.group', $employee), [
        'groups' => [$group->id]
    ]);

    $this->assertEquals(1, $employee->groups);
}