【发布时间】:2019-01-27 14:49:30
【问题描述】:
我正在尝试在我的新工作中运行一个 Laravel 项目。离开的开发人员在交接文件中没有说明如何启动和运行代码,其他人也不知道。
SQLite 数据库是使用:memory: 创建的,php artisan migrate 可以正常工作。
...
Migrating: 2016_06_01_000004_create_oauth_clients_table
Migrated: 2016_06_01_000004_create_oauth_clients_table
...
特征(标准 Laravel 代码)中的方法 beginDatabaseTransaction() 正在执行,但之后没有任何表存在。就好像正在创建数据库但没有执行迁移一样。
<?php
namespace Illuminate\Foundation\Testing;
trait DatabaseTransactions
{
/**
* Handle database transactions on the specified connections.
*
* @return void
*/
public function beginDatabaseTransaction()
{
$database = $this->app->make('db');
foreach ($this->connectionsToTransact() as $name) {
$database->connection($name)->beginTransaction();
}
$this->beforeApplicationDestroyed(function () use ($database) {
foreach ($this->connectionsToTransact() as $name) {
$connection = $database->connection($name);
$connection->rollBack();
$connection->disconnect();
}
});
}
测试代码(最后显示的指令失败):
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Laravel\Passport\ClientRepository;
class PassportTest extends TestCase
{
use DatabaseTransactions;
public function test_basic_oauth_token_authentication(){
$clientRepository = new ClientRepository();
$client = $clientRepository->createPersonalAccessClient(
null, 'Test Personal Access Client', $this->baseUrl
);
命令行:
vendor/bin/phpunit tests/Feature/PassPortTest
错误信息:
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 no such table: oauth_clients Caused by Doctrine\DBAL\Driver\PDOException: SQLSTATE[HY000]: General error: 1 no such table: oauth_clients Caused by PDOException: SQLSTATE[HY000]: General error: 1 no such table: oauth_clients
如何确保表已作为每个测试的一部分创建?
【问题讨论】:
-
尝试在setUp函数中调用artisan migrate
-
@DigitalDrifter 另一个网站建议在测试中首先调用
Artisan::call('migrate');,但这没有效果。 -
TestCase类中有什么额外的内容吗? -
使用
RefreshDatabase特征。 laravel.com/docs/5.6/… -
@DigitalDrifter 好的。使用
RefreshDatabase而不是 的DatabaseTransactions让我克服了那个错误(到一个不相关的错误)。由于方法名称冲突,尝试use会出现 PHP 错误。
标签: laravel sqlite phpunit laravel-5.6 in-memory-database