2014-02-21 2 views
4

Я запускаю Laravel на OS X с использованием MAMP, и я пытаюсь выполнить некоторые модульные тесты с использованием PHPUnit и sqlite, однако, когда я запускаю свои тесты, я получаю ошибкуLaravel testing, нет такой таблицы, sqlite

General error: 1 no such table: users

Я попытался запустить мастер, чтобы вручную перенести базу данных с помощью теста --env =, который работает нормально, однако я все равно получаю сообщение об ошибке. Я даже звоню Artisan::call('migrate'); в методе SetUp.

/app/config/testing/database.php

return [ 
    'default' => 'sqlite', 

    'connections' => [ 
     'sqlite' => [ 
      'driver' => 'sqlite', 
      'database' => ':memory:', 
      'prefix' => '' 
     ], 
    ] 
]; 

EDIT: файл миграции:

Schema::create('users', function($table) { 
    $table->increments('id'); 
    $table->string('email', 32)->unique(); 
    $table->string('password', 64); 
    $table->string('username', 32)->unique(); 
    $table->dateTime('birthdate'); 
    $table->enum('status', array('ACTIVE', 'INACTIVE')); 
    $table->timestamps(); 
}); 

Schema::create('roles', function($table) { 
    $table->increments('id'); 
    $table->string('name', 32); 
}); 

Schema::create('role_user', function ($table) { 
    $table->increments('id'); 

    $table->unsignedInteger('user_id'); 
    $table->unsignedInteger('role_id'); 

    $table->foreign('user_id')->references('id')->on('users'); 
    $table->foreign('role_id')->references('id')->on('roles'); 

}); 
+0

Можете ли вы показать нам свою миграцию, которая создает пользователей таблицы? Какую БД вы используете в остальной части вашего приложения? MySQL? –

+0

Да, это mysql, я добавлю файл миграции, когда вернусь к работе. – Kao

+0

Добавлено перемещение в редакторе – Kao

ответ

6

SQLite не поддерживает тип ENUM: http://www.sqlite.org/datatype3.html

Вот почему таблица пользователей не создана. Вам придется запускать тесты на классической таблице MySQL или удалять все типы ENUM.

+0

Решила мою проблему, вместо этого перешла таблица «Enum». Спасибо. – Kao

1

Запуск миграции перед запуском теста не работает, потому что, как ваш config показывает, что вы находитесь в памяти, поэтому каждый раз, когда вы запускаете новый тест, он запускает миграцию для каждого сеанса тестирования и полностью уничтожает все данные тестирования, когда он заканчивается.

Для использования памяти базы данных , запускать ваши миграции каждый раз, когда вы запускаете тесты, расширить свои классы от TestCase что-то вроде:

<?php 

class TestCase extends Illuminate\Foundation\Testing\TestCase { 

    public function createApplication() 
    { 
     $unitTesting = true; 
     $testEnvironment = 'testing'; 
     return require __DIR__.'/../../bootstrap/start.php'; 
    } 

    public function setUp() 
    { 
     parent::setUp(); 
     $this->prepareForTests(); 
    } 
    private function prepareForTests() 
    { 
     Artisan::call('migrate'); 
     Artisan::call('db:seed'); 
    } 
    public function tearDown() 
    { 
     parent::tearDown(); 
    } 
} 
+0

Это примерно как мой тест выглядит уже. – Kao

Смежные вопросы