我要测试此功能:
public function store(array $input){
\DB::beginTransaction();
try{
$input['name'] = $input['first_name'].$input['last_name'];
$input['password'] = str_random(7);
$user = $this->model->create($input);
$role_user = new RoleUser();
$role_user->role_id = $input['role_id'];
$role_user->user_id = $user->id;
$role_user->save();
\DB::commit();
return $user;
}catch (Exception $e){
\DB::rollback();
return false;
}
}
这是我的测试
/** @test */
public function testUserRepoStoreFail()
{
$roleUser = factory(\App\Models\RoleUser::class)->create();
$role = factory(\App\Models\Role::class)->create();
$this->expectException(Exception::class);
$data =[
'role_id' => $role->id,
'name' => $this->faker->name,
'first_name' => $this->faker->name,
'last_name' => $this->faker->name,
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => str_random(10),
];
$rep = new UserRepositoryEloquent($this->container);
//
$user = $rep->store($data);
}
我删除了电子邮件以使存储功能失败
当我这样做时,我得到:
1)Tests \ Unit \ AuthTest :: testUserRepoStoreFail断言抛出“ Exception”类型的异常失败。**
答案 0 :(得分:2)
即使抛出异常,它也会被捕获并在store
方法内进行处理。 expectException
期待未处理的异常。
如果要在方法中测试catch块,则必须断言DB::rollback()
已被调用,或者只是断言该方法返回false
而不是用户实例。
答案 1 :(得分:0)
该测试未通过,可能是因为当您错过电子邮件时未引发任何异常。进行手动测试时,检查是否收到任何异常。如果不是这样,请尝试自己添加一个例外:
public function store(array $input){
\DB::beginTransaction();
try{
$input['name'] = $input['first_name'].$input['last_name'];
$input['password'] = str_random(7);
//Add this check
if(empty($input['email'])){
throw new \InvalidArgumentException("Email is empty");
}
$user = $this->model->create($input);
$role_user = new RoleUser();
$role_user->role_id = $input['role_id'];
$role_user->user_id = $user->id;
$role_user->save();
\DB::commit();
return $user;
}catch (Exception $e){
\DB::rollback();
return false;
}
}