Laravel 单元测试迁移失败
Posted
技术标签:
【中文标题】Laravel 单元测试迁移失败【英文标题】:Laravel Unit Testing Migration fails 【发布时间】:2015-02-05 11:29:25 【问题描述】:我正在尝试运行 phpUnit 测试。我在:memory
中为测试环境设置了SQLite
。在我的设置中,我调用了Artisan::call('migrate')
,但随后出现以下错误:
一般错误:1 无法添加默认值为 NULL 的 NOT NULL 列 (SQL: alter table "admins" add column "title" text not null)
基本上,任何修改现有表的迁移文件都会返回错误。为什么?
这是抱怨的文件迁移:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class AddTitleToAdminsTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::table('admins', function(Blueprint $table)
$table->text('title');
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::table('admins', function(Blueprint $table)
$table->dropColumn('title');
);
【问题讨论】:
这个错误看起来像是您的迁移出了问题,而不是您调用它的方式。您能否通过产生此错误的迁移更新问题? @lukasgeiter,感谢您的回复。我更新了我的答案 【参考方案1】:我做了一些研究,在 Stack Overflow 上找到了this post。
SQLite 的列NOT NULL
似乎存在问题,但没有默认值。在相同情况下,mysql 只使用空字符串(对于 varchar)或“0”(对于数字)。所以它有点内置默认值。
要解决您的问题,您可以使列可为空(仅当您希望它可为空时)或定义一个默认值。
$table->text('title')->nullable();
$table->text('title')->default('');
【讨论】:
以上是关于Laravel 单元测试迁移失败的主要内容,如果未能解决你的问题,请参考以下文章