Laravel中的测试存储方法

时间:2016-06-18 01:00:39

标签: php laravel testing phpunit

我试图以最简单的方式测试存储方法。我不一定需要Mockery,我可以实际添加到数据库中。无论如何,我无法让Mockery工作。

现在我有了这个:

public function testStore()
{
    $data = ['name' => 'TestClub', 'code' => 'TCL'];
    Input::replace($data);
    $this->route('POST', 'clubs.store', $Input::all());
    $this->assertResponseOk();
}

这是我的控制器方法:

public function store() {
    $validator = Validator::make($data = Input::all(), Club::$rules);
    if ($validator->fails()) {
        return Redirect::back()->withErrors($validator)->withInput();
    }
    Club::create($data);
    return redirect(Session::get('backUrl'));
}

我收到返回代码500,我不明白为什么。我可以以某种方式看到它发送的请求吗?

我正在使用Laravel 5.0

1 个答案:

答案 0 :(得分:0)

首先,永远不要使用Input::all()。您可能不知道提交时表单中的内容,而是使用only

但是,如果可以帮助,也不应该在Controller中放置验证逻辑。相反,您应该创建一个新的Request并将验证规则放在rules数组中。我们来看看

php artisan make:request StoreUserRequest

然后在此请求中,您将return true添加到您的authorize函数(或者您需要识别用户是否应该能够发出请求的任何逻辑),然后是您的规则到rules()函数(对规则函数中的数组,更具体)。

现在将新的StoreUserRequest添加为store()函数的第一个参数的依赖项。

public function store(App\Http\Requests\StoreUserRequest $request)

现在使用$request->only()方法恢复您的字段。

Club::create($request->only(['field1', 'field2', 'blob1', 'text1']);

此外,请确保您希望添加数据的任何字段都列在protected $fillable模型的Club数组中。

protected $fillable = ['field1', 'field2', 'blob1', 'text1'];

这应该这样做。