具有RegistersUsers特性的自定义注册控制器,在单元测试中未调用create方法

时间:2018-11-05 12:08:36

标签: laravel unit-testing laravel-authentication

我正在使用Laravel框架开发Web应用程序。我现在正在创建一个自定义注册控制器,该控制器将覆盖RegistersUsers特征中的某些方法。但是不会调用create方法。在下面查看我到目前为止所做的事情。

我用以下代码创建了一个名为CustomerRegistarController的控制器

class CustomerRegisterController extends Controller
{
    use RegistersUsers;

    public function __construct()
    {
        $this->middleware('guest');
    }

    public function showRegistrationForm()
    {
        return view('auth.customer_register');
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string'],
            'surname' => ['required', 'string'],
            'email' => ['required', 'string', 'email', 'unique:users'],
            'password' => ['required', 'string', 'min:6', 'confirmed'],
            'code' => ['required', 'string' ],
        ]);
    }

    protected function create(array $data)
    {
        //code for creating the customer
        return $user;
    }


    protected function redirectTo()
    {
        return route('customers.index');
    }
}

这是发布路线

Route::post('customer/register', 'Auth\CustomerRegisterController@register')->name('customer.register.store');

我正在像这样对注册逻辑进行单元测试。

function test_custom_can_register()
{
    $body = [
      'name' => $this->faker->name,
      'surname' => $this->faker->name,
      'email' => $this->faker->unique()->email,
      'password' => $this->faker->password,
      'code' => $this->faker->randomNumber()
    ];

    $this->post(route('customer.register.store'), $body)
        ->assertStatus(Response::HTTP_FOUND);

    $this->assertDatabaseHas('users', [
       'email' => $body['email'],
    ]);
}

运行测试时,未在数据库中创建用户,因为未调用create方法。为什么?有什么问题,我该如何解决?

当我从UI中注册时被调用,只是在单元测试中不起作用。我该如何测试?

0 个答案:

没有答案