Lumen не переносит таблицы пакетов при выполнении phpunit - PullRequest
0 голосов
/ 04 декабря 2018

В моем приложении Lumen, когда я выполняю

php artisan migrate --seed

, оно работает хорошо.

Но когда я пытаюсь запустить свои тесты с phpunit, оно не запускает миграцию изпакет Laravel, который я кодировал, поэтому все тесты не пройдены

Я запускаю свои миграции в своем тесте с:

Artisan::call('migrate');

, который я использую в тестировании памяти для более быстрого запуска.

Вот мое приложение Lumen Testcase.php

abstract class TestCase extends Laravel\Lumen\Testing\TestCase
{
    /** @var array */
    protected $dispatchedNotifications = [];
    protected static $applicationRefreshed = false;
    /**
     * Creates the application.
     *
     * @return \Laravel\Lumen\Application
     */
    /**
     * Creates the application.
     *
     */
    public function createApplication()
    {
        return self::initialize();
    }

    private static $configurationApp = null;

    public static function initialize()
    {
        $app = require __DIR__ . '/../bootstrap/app.php';
        if (is_null(self::$configurationApp)) {
            $app->environment('testing');

            if (config('database.default') == 'sqlite') {

                $db = app()->make('db');
                $db->connection()->getPdo()->exec("pragma foreign_keys=1");
            }

            Artisan::call('migrate');
            Artisan::call('db:seed');

            self::$configurationApp = $app;
        }

        return $app;
    }


    /**
     * Refresh the application instance.
     *
     * @return void
     */
    protected function forceRefreshApplication()
    {
        if (!is_null($this->app)) {
            $this->app->flush();
        }
        $this->app = null;
        self::$configurationApp = null;
        self::$applicationRefreshed = true;
        parent::refreshApplication();
    }
    ...

В моем пакете я использую метод загрузки поставщика услуг:

$this->loadMigrationsFrom(__DIR__.'/../database/migrations');

, а затем тестовый пример:

class TournamentsTest extends TestCase
{

    use DatabaseTransactions, AttachJwtToken;
    protected $initialTournamentNum = 6;
    protected $defaultPagintation = 25;
    protected $user;


    /** @test */
    public function user_can_see_tournament_list()
    {
        $response = $this
            ->call('GET', '/tournaments');
        $this->assertEquals(HttpResponse::HTTP_OK, $response->status());
    }
    ...

Все мои тесты не пройдены:

PDOException: SQLSTATE[HY000]: General error: 1 no such table: ken_venue

ken_venue - это таблица из пакета laravel

На самом деле, этот же пакет хорошо работает в Laravel 5.7приложение.но я переношу это приложение в приложение Lumen.

Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 04 декабря 2018

Сначала несколько замечаний:

Ваша тестовая функция не начинается с test, для меня в Laravel такие тесты не будут выполняться.

Во-вторых, попробуйте запустить семена вместовызов migrate и seed вручную

namespace Tests\Unit;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Tests\TestCase;

class ShippingCostTest extends TestCase
{
    use DatabaseMigrations; // call migrations this way

    public function testDoesApply() // start your function with the word 'test'

        $this->assertTrue(true); // call assert functions
    }

    protected function setUp() // use this function for setup
    {
        parent::setUp();
        $this->seed(); // call this for seeding
    }
}

В-третьих: используете ли вы один и тот же тип базы данных (например, MySQL в обоих случаях), поскольку вы используете sqlite для тестирования, синтаксис может внезапно сломаться из-за различиймежду системами.

...