使用Laravel 5.4

时间:2017-08-21 21:25:02

标签: php laravel testing phpunit

我在内存中使用sqlite编写功能测试以获得更快的结果。

一切似乎都没问题,但我有几个表需要填写,以便测试工作。它们是小表,几乎从不改变,所以我想只在phpunit命令的开头播种一次。

它可以吗???

我唯一要努力的是将Artisan::call('db:seed');添加到createApplication()但是每次测试都会播种一次,我不需要它......

任何想法我应该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以随时使用环境变量刷新数据库。我不知道这是不是最好的方式,但它对我有用。

将变量添加到 .env 文件

   public function createApplication()
    {
        $app = require __DIR__.'/../bootstrap/app.php';

        $app->make(Kernel::class)->bootstrap();

        if(getenv('DB_REFRESH') === 'true') {
            \Artisan::call('migrate:refresh');
            \Artisan::call('db:seed');
            putenv('DB_REFRESH=false');
        }

        return $app;
    }

并更改 CeatesApplication.php 特征方法:

public function testBasicTest()
{
    $this->assertTrue(true);
}

public function testChangeDatabase()
{
    //if database changes here set variable to true
    //and it will be refreshed before the next test
    putenv("DB_REFRESH=true");
}

public function testRefresh()
{
    //you have fresh database here
}

然后尝试 ExampleTest.php

{!! Form::open(['url' => 'fill2', 'method' => 'post', 'class' => 'result', ]) !!}
            @forelse ($quests as $quest)
                @if($post->form_id == $quest->form_id)
                    <blockquote class="blockquote bq-success">
                        <p class="bq-title"></p>
                        <p>{{$quest->quest_name}}</p>
                        <div class="d-flex flex-column">
                            @foreach($responses as $response)
                                @if($quest->quest_id == $response->quest_id)
                                    <table>
                                        <tr>
                                            <th>

                                                <input type="{{$response->response_type}}" name="{{$response->id}}"></th>
                                            <th><label class="radio-inline">{{$response->response}}</label></th>
                                        </tr>
                                    </table>
                                @endif
                            @endforeach
                                <small>{{notempty ($quest->quest_note)}}</small>
                        </div>
                    </blockquote>
                @endif


            @empty
            @endforelse

            {!! Form::button('Send', ['type' => 'submit', 'class' => 'btn btn-primary']) !!}
            {!! Form::close() !!}