【问题标题】:test store method in LaravelLaravel 中的测试存储方法
【发布时间】:2016-10-19 22:12:03
【问题描述】:

我正在尝试以最简单的方式测试 store 方法。我不一定需要嘲弄,我可以实际添加到数据库中。无论如何,我无法让 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

【问题讨论】:

  • 您可以在测试中使用$this->dump() 打印出有关请求/响应的数据。

标签: php laravel testing phpunit


【解决方案1】:

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

但是,如果您能提供帮助,您也不应该将验证逻辑放入控制器中。相反,您应该创建一个新的Request 并将您的验证规则放入rules 数组中。让我们看看

php artisan make:request StoreUserRequest

然后在此请求中,您将添加 return true 到您的 authorize 函数(或您需要确定用户是否应该能够提出请求的任何逻辑),然后将您的规则添加到 @987654328 @函数(到规则函数内的数组,更具体)。

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

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

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

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

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

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

应该这样做。

【讨论】:

  • 我在您的回答中看到了很多建议,但没有看到这实际上将如何解决问题。
  • 但是他怎么测试这个呢?
猜你喜欢
  • 2013-07-28
  • 2018-08-08
  • 2016-04-13
  • 2019-07-13
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2021-04-10
  • 2013-07-31
相关资源
最近更新 更多