簡體   English   中英

Laravel Controller UNIT測試問題?

[英]Laravel Controller UNIT Testing Issue?

我正在創建Laravel 4應用程序,但遇到了一些障礙。 在為我的控制器編寫測試時,由於一些奇怪的原因,我注意到它似乎無法驗證。 這是我的(簡化后的)控制器代碼。

<?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');
    }
}

現在,他測試為上述兩種方法創建的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']);
}

初始測試成功通過,但第二次測試失敗。 經過一番調查后,它表明Validation沒有通過,這意味着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']);
}

通過檢查會話來調試測試,就像我懷疑的那樣,輸入沒有被填充,這可能是什么原因? 驗證消息已返回。

$response = $this->route('POST', 'guest.report_issue', array(
    'full_name' => 'Foo',
    'email' => 'Man@Chu.com',
    'issue' => 'FooBar'));

您可以將參數作為數組傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM