我正在尝试运行Laravel功能测试,使用模型工厂创建一些测试数据。
在其他测试中,在相同的目录和命名空间中,使用类似的“make”特性,数据库中不会保存任何条目。但有了这一个,他们就是。
使用时
app('env')
它返回
'testing'
,因此环境是正确的。
如何在不保存到mySQL数据库的情况下运行这些测试?
角色测试
namespace Tests;
use Tests\Traits\MakeRoleTrait;
class RoleTest extends BrowserKitTestCase
{
use MakeRoleTrait;
public function testGetChildren()
{
$childRoles = [];
$baseRoles = [];
for ($i = 0; $i < 4; $i++) {
$parentId = null;
if($i > 0){
$parentId = $baseRoles[$i-1]->id;
}
$childRole = $this->makeRole();
// Create base role
$baseRoles[] = $this->makeRole([
'parent_id' => $parentId,
'display_name' => $childRole->display_name,
'site_id' => null
]);
if($i < 3){
$childRoles[] = $childRole;
}
}
$children = $childRoles[0]->getChildren();
$this->assertEquals($childRoles,$children);
}
}
MakeRoleTrait公司
namespace Tests\Traits;
use Faker\Factory as Faker;
use App\Models\Role;
use App\Repositories\RoleRepository;
trait MakeRoleTrait
{
/**
* Create fake instance of Role and save it in database
*
* @param array $roleFields
* @return Role
*/
public function makeRole($roleFields = [])
{
/** @var RoleRepository $roleRepo */
$roleRepo = \App::make(RoleRepository::class);
$theme = $this->fakeRoleData($roleFields);
return $roleRepo->skipPresenter()->create($theme);
}
/**
* Get fake instance of Role
*
* @param array $roleFields
* @return Role
*/
public function fakeRole($roleFields = [])
{
return new Role($this->fakeRoleData($roleFields));
}
/**
* Get fake data of Role
*
* @param array $roleFields
* @return array
*/
public function fakeRoleData($roleFields = [])
{
$role = factory(\App\Models\Role::class,1)->make();
$array = $role->first()->toArray();
$array = array_merge(
$array,
$roleFields
);
return $array;
}
}