亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel phpunit 如何使用 diffent migrations 進行測試

Laravel phpunit 如何使用 diffent migrations 進行測試

PHP
收到一只叮咚 2022-08-05 09:45:01
我正在嘗試在Laravel中設置測試,但我想運行與通常運行的遷移不同的遷移。我為啟動數據庫而運行的遷移從生產環境中導入數據。對于測試,我想使用一個名為“test”的不同數據庫,并且我想用測試數據填充這個測試數據庫,而不是生產數據。我添加了一個“測試”連接,該連接使用“test”數據庫:config/database.php'connections' => [        'mysql' => [            'database' => env('DB_DATABASE', 'forge'),            ...        ],        'testing' => [            'database' => 'test',            ...        ],],我設置了這個“測試”連接:phpunit.xml<?xml version="1.0" encoding="UTF-8"?><phpunit ...>    ...    <php>        <env name="DB_CONNECTION" value="testing"/>        ...    </php></phpunit>現在,我想使用測試數據初始化此“測試”數據庫,使用與默認文件夾不同的文件夾進行遷移。我可以像這樣使用正常的遷移:<?phpnamespace Tests;use Illuminate\Foundation\Testing\TestCase as BaseTestCase;use Illuminate\Foundation\Testing\DatabaseMigrations;abstract class TestCase extends BaseTestCase{    use DatabaseMigrations;    public function setUp(): void    {        parent::setUp();        $this->seed();    }}但這使用默認文件夾 。我想把測試遷移放在文件夾.database/migrationstests/database/migrations有沒有辦法讓使用來自另一個文件夾的遷移?use DatabaseMigrations;
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

在遷移運行之前,你可能需要覆蓋 trait 中的方法,并從那里設置應用的數據庫路徑。runDatabaseMigrationsDatabaseMigrations


該方法可能最終如下所示:runDatabaseMigrations


use DatabaseMigrations { runDatabaseMigrations as runMigration; }


    public function runDatabaseMigrations()

    {

        $this->app->useDatabasePath(base_path('tests/database')); //example path

//        dump($this->app->databasePath());

        $this->runMigration();

    }

或者,您可以在應用服務提供商的方法中設置:boot


    if (config('app.env') === 'testing') { //Laravel automatically set env to 'testing' when running test

        $this->app->useDatabasePath(base_path('tests/database'));

    }

遷移將查找名為“遷移”的“測試/數據庫”子文件夾。


PS:如果您在默認文件夾中有其他代碼或文件夾,則會有副作用。例如,對于此測試類,將找不到您的工廠類。database


查看完整回答
反對 回復 2022-08-05
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

工匠遷移有一個路徑選項,你必須做出自己的特質才能具有類似的功能。我在想這樣的事情。


trait PathDatabaseMigrations {


    public function runDatabaseMigrations()

    {

        // optimal 

        $path = 'tests/database/migrations';


        $this->artisan('migrate:fresh', ['--path' => $path,]);


        $this->app[Kernel::class]->setArtisan(null);


        $this->beforeApplicationDestroyed(function () {

            $this->artisan('migrate:rollback', ['--path' => $path,]);


            RefreshDatabaseState::$migrated = false;

        });

    }

}


查看完整回答
反對 回復 2022-08-05
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

該 trait 具有一個調用的方法,該方法將重載它在運行遷移時使用的參數。我更改為單個測試的特定測試遷移文件,方法是將其作為遷移參數傳入。RefreshDatabasemigrateUsing--path


namespace Tests\Unit;


use Tests\TestCase;

use App\Models\Traits\HasUuid;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Foundation\Testing\RefreshDatabase;


class HasUuidTest extends TestCase

{

    use RefreshDatabase;


    protected function migrateUsing()

    {

        return [

            '--path' => 'tests/migrations/2022_03_15_220516_create_test_uuid_table.php'

        ];

    }


    public function test_has_uuid()

    {

        $model = new TestUuid;

        $this->assertEmpty($model->id);

        $model->save();

        $this->assertNotEmpty($model->id);

    }

}


class TestUuid extends Model

{

    use HasUuid;

}


查看完整回答
反對 回復 2022-08-05
  • 3 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號