缺少数据库中的列,但仅在测试时

时间:2018-03-14 16:31:36

标签: laravel testing phpunit

由于数据库中缺少列,我的测试失败了。奇怪的是柱子实际存在。

下面是我运行的一个小测试,以证明该列存在。

控制器

public function index()
{
    if (Schema::hasColumn('occurrences', 'occurrenceable_type')) {
        echo 'yes I have the bloody column';
    } else {
        echo 'no column for me!';
    }
}

返回>> “是的,我有血腥的专栏&#39 ;;

测试

public function an_admin_can_create_a_new_occurrence()
{
    if (Schema::hasColumn('occurrences', 'occurrenceable_type')) {
        echo 'yes I have the bloody column';
    } else {
        echo 'no column for me!';
    }
}

返回>> '没有列给我'

测试和控制器之间的差异是

控制器:数据库是MySQL数据库连接

测试:数据库是在内存中运行的MySQLite数据库。

测试实现use RefreshDatabase;,如果在MySQL数据库上运行artisan migrate:refresh,则列存在。

这是用于构建该表的迁移

````

Schema::create('occurrences', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('occurrenceable_id');
        $table->integer('occurrenceable_type');
        $table->integer('occurrence_status_id');
        $table->text('days');
        $table->string('tutor')->nullable();
        $table->integer('location_id')->nullable();
        $table->dateTime('start_date')->nullable();
        $table->dateTime('end_date')->nullable();
        $table->text('additional_info')->nullable();
        $table->timestamps();
        $table->softDeletes();
        $table->integer('created_by');
        $table->integer('updated_by');
        $table->integer('deleted_by');
    });

````

为什么它们之间会有差异?我该如何解决?

1 个答案:

答案 0 :(得分:0)

如果测试是在MySQL数据库上运行的话,这似乎是SQLite数据库的一个问题,问题没有出现,测试运行成功。