1

私は Laravel 4 アプリを作成していますが、少し問題が発生しました。コントローラーのテストを書いているときに、何らかの奇妙な理由で検証できないことに気付きました。Heres 私の (簡素化された) コントローラー コードです。

<?php use Controllers\Base\PublicController;

class GuestController extends PublicController {

    /**
     * Display the report issue form.
     *
     * @return null
     */
    public function getReportIssue()
    {
        $this->layout->title = Lang::get('app.report_issue');

        $this->layout->content = View::make('guest.report_issue');
    }

    public function postReportIssue()
    {
        $rules = [
            'full_name' => 'required|min:2|max:100',
            'email'     => 'required|email',
            'issue'     => 'required|min:10|max:1000',
        ];

        $validator = Validator::make(Input::all(), $rules);

        if ($validator->fails())
        {
            return Redirect::route('guest.report_issue')
                ->withInput()
                ->withErrors($validator->messages());
        }

        return Redirect::route('guest.reported_issue')
            ->with('msg', 'Okay');
    }
}

今、彼は上記の 2 つの方法のために作成されたテスト ive を...

public function testHandleFailReportIssue()
{
    Input::replace([
        'full_name' => '',
        'email'     => '',
        'issue'     => '',
    ]);

    $this->call('POST', 'report-issue');

    $this->assertRedirectedToRoute('guest.report_issue');

    $this->assertSessionHasErrors(['full_name', 'email', 'issue']);
}

public function testHandlePassReportIssue()
{
    Input::replace([
        'full_name' => 'John Doe',
        'email'     => 'john@localhost.dev',
        'issue'     => 'Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar.
                        Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar'
    ]);

    $this->call('POST', 'report-issue');

    $this->assertRedirectedToRoute('guest.reported_issue', [], ['msg']);
}

最初のテストは成功しますが、2 番目のテストは失敗します。少し調べたところ、Input::replace()有効なリクエスト値を挿入したため、検証が合格していないことがわかりました。これは、メソッドが機能していないことを意味します。多分私は何かを逃していますか?

[編集]

私はこれをすることにしました

public function testHandlePassReportIssue()
{
    Input::replace([
        'full_name' => 'John Doe',
        'email'     => 'john@flashdp.com',
        'issue'     => 'Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar.
                        Lorem ipsum idom lola singel tudor reopmatica loesn dolor gotar',
    ]);

    $response = $this->route('POST', 'guest.report_issue');

    dd($this->app['session']->get('errors'));

    $this->assertRedirectedToRoute('guest.reported_issue', [], ['msg']);
}

セッションを検査してデバッグするテストで、私が疑ったように、入力が入力されていませんでした。これが起こった理由は何ですか? 検証メッセージが返されました。

4

1 に答える 1