我正在将我的应用程序从Codeigniter迁移到laravel,我们也在进行集成和单元测试。
该数据库由2个数据库组成:
old
是原始代码点火器中使用的那个。new
用于codeingiter项目中不相关的其他功能。因此,我想制作一个用于old
数据库的迁移脚本,但是为了避免故障,我想为每个数据库的迁移脚本指定一个特定的文件夹。
因此,我找到了这个工具:https://github.com/Xethron/migrations-generator并通过此帮助输出:
Description:
Generate a migration from an existing table structure.
Usage:
migrate:generate [options] [--] [<tables>]
Arguments:
tables A list of Tables you wish to Generate Migrations for separated by a comma: users,posts,comments
Options:
-c, --connection[=CONNECTION] The database connection to use. [default: "etable_api"]
-t, --tables[=TABLES] A list of Tables you wish to Generate Migrations for separated by a comma: users,posts,comments
-i, --ignore[=IGNORE] A list of Tables you wish to ignore, separated by a comma: users,posts,comments
-p, --path[=PATH] Where should the file be created?
--defaultIndexNames Don't use db index names for migrations
--defaultFKNames Don't use db foreign key names for migrations
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-tp, --templatePath[=TEMPLATEPATH] The location of the template for this generator
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
我可以使用以下命令序列来为迁移脚本创建专用文件夹:
mkdir -p ./database/migration/old
php artisan migrate:generate -c old -p ./database/migration/old
通过工匠,我可以通过以下方式运行迁移:
php artisan migrate -c old -p ./database/migration/old
因此,我可以使用laravel提供的解决方案:
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
use RefreshDatabase;
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
// Do some fancy stuff here
}
}
但是在使用Illuminate\Foundation\Testing\RefreshDatabase
时如何为要参与测试的数据库的迁移脚本指定指定的文件夹?
答案 0 :(得分:0)
我看到这个问题有点老了,但是如果有人在寻找这个问题的答案,这对我有用。您可以通过对应用程序进行一些调整来完成您想做的事情。
当我尝试对带有migrations子文件夹的应用程序进行测试时发现的两个问题是,在构建应用程序以及通过RefreshDatabase特性刷新数据库时,子文件夹中的迁移未执行。 / p>
要使其正常工作,我必须:
RefreshDatabase
特征,将其附加在包含的RefreshDatabase
特征上。RecursiveRefreshDatabase.php
该文件包含以下代码:<?php
namespace Tests\Traits;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Foundation\Testing\RefreshDatabase;
trait RecursiveRefreshDatabase {
use RefreshDatabase;
/**
* Refresh the in-memory database.
*
* @return void
*/
protected function refreshInMemoryDatabase()
{
$this->artisan('migrate');
// 'database/migrations/sub-folder’ would probably be ‘database/migrations/old’ in the case of the OP
$this->artisan('migrate', ['--path' => 'database/migrations/sub-folder’]);
$this->app[Kernel::class]->setArtisan(null);
}
}
use Illuminate\Foundation\Testing\RefreshDatabase;
使用
use Tests\Traits\RecursiveRefreshDatabase as RefreshDatabase;
refreshInMemoryDatabase
方法,但是如果您不使用内存数据库进行测试,则可能需要覆盖另一种方法。tests/CreatesApplication.php
,以调用子文件夹迁移createApplication(),如下所示public function createApplication()
{
$app = require __DIR__ . ‘/../../bootstrap/app.php’;
$app->make(Kernel::class)->bootstrap();
$this->afterApplicationCreated(function () {
// 'database/migrations/sub-folder’ would probably be ‘database/migrations/old’ in the case of the OP
$this->artisan(‘migrate’, [‘—path’ => ‘database/migrations/sub-folder’]);
});
return $app;
}
这些更改对我有用,并使我的测试再次起作用。让我知道它是否对您有用!