我在内存中使用sqlite编写功能测试以获得更快的结果。
一切似乎都没问题,但我有几个表需要填写,以便测试工作。它们是小表,几乎从不改变,所以我想只在phpunit命令的开头播种一次。
它可以吗???
我唯一要努力的是将Artisan::call('db:seed');
添加到createApplication()
但是每次测试都会播种一次,我不需要它......
任何想法我应该怎么做?
答案 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() !!}