我是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失败。
我该如何解决这个问题?
答案 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);
}