测试在Laravel

时间:2015-08-21 23:05:49

标签: php unit-testing laravel phpunit

我最近开始编写单元测试,所以概念本身对我来说仍然不是很清楚,我正在尝试通过在我正在进行的项目上编写单元测试来学习它。

我已经测试了身份验证,这一切都很好;但是,当我想测试表单提交时,它会引发以下错误:

'ErrorException' with message 'Undefined variable: errors'

当我调试时,我发现没有为Phpunit定义视图变量$errors。我正在测试的表单被抽象为部分视图,以便从CREATE/UPDATE引用它,但事实证明,Phpunit无法处理部分视图。

我在评论@include('view.name')形式时测试了我正在测试的视图通过它。

我的问题是这是否有任何解决方法。如何测试具有部分视图的视图?

异常

Caused by
exception 'ErrorException' with message 'Undefined variable: errors' in                  /Users/***/Developpement/***/storage/framework/views/36f0b5638ab33     be6eca70d4986f07ad2:2
Stack trace:
#0     /Users/***/Developpement/***/storage/framework/views/36f0b5638ab33    be6eca70d4986f07ad2(2):     Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined     varia...', '/Users/***/D...', 2, Array)
#1     /Users/***/Developpement/***/vendor/laravel/framework/src/Illumina    te/View/Engines/PhpEngine.php(42): include('/Users/***/D...')
#2     /Users/***/Developpement/***/vendor/laravel/framework/src/Illumina    te/View/Engines/CompilerEngine.php(58): ***        minate\View\Engines\PhpEngine->evaluatePath('/Users/***/D...', Array)
#3         /Users/***/Developpement/***/vendor/laravel/framework/src/Illumina    te/View/View.php(138): Illuminate\View\Engines\CompilerEngine-    >get('/Users/***/D...', Array)

家长视图

<div class="container">

    {!! Form::open(['route' => 'admin.festivals.create.post', 'enctype' => 'multipart/form-data']) !!}

    <legend>Create</legend>
    <div class="pull-right">
        <a class="btn btn-info" href="   {{route('admin.festivals.list')}}">Home</a>
    </div>

     // HERE IS THE LINE WHEN I COMMENT IT IT WORKS
    {{--@include('admin.festivals._form')--}}

        {!! Form::submit('Create', ['class' => 'btn btn-primary col-md-2']) !!}
    {!! Form::close() !!}


</div>

部分视图

<div class="form-group row {{ $errors->has('start_date') ? 'has-error' : '' }}">
<label class="control-label col col-md-2" for="start_date">Start Date</label>

<div class="col col-md-4">
    {!! Form::datepicker('start_date', (isset($festival)) ? $festival->start_date : null) !!}
    {!! $errors->first('start_date', '<span class="help-block">:message</span>') !!}
</div>

1 个答案:

答案 0 :(得分:0)

除了使用isset()核对外,没有其他解决方法。单元测试旨在测试后端,而不是表单。

来自wikipedia

  

在程序编程中,单元可以是整个模块,但更常见的是单个功能或过程。在面向对象的编程中,单元通常是整个接口,例如类,但可以是单独的方法。

如果要测试表单和用户界面的行为,请使用前端测试框架,例如selenium