PHPUnit always 运行 setUpDatabase every 测试方法
PHPUnit always run setUpDatabase every test method
我只是想为 my laravel package 添加 PHPUnit 测试,但我不知道为什么 setUpDatabase()
从 TestCase
总是 运行 每个从 [= 扩展的测试14=] class.
这是我的 TestCase
class:
class TestCase extends BaseTestCase
{
protected function setUp(): void
{
parent::setUp();
$this->setUpDatabase();
}
protected function setUpDatabase()
{
$this->app['db']->connection()->getSchemaBuilder()->create(
'pages',
function(Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('content');
$table->binary('options')->nullable();
}
);
}
}
这是我的 PageModelTest
class :
class PageModelTest extends TestCase
{
public function setUp(): void
{
parent::setUp();
}
/** @test */
public function it_tests_right_row_count()
{
$pages = Page::all();
$this->assertCount(3, $pages);
}
/** @test */
public function it_tests_get_dynamic_column_data()
{
$page = Page::find(1);
$this->assertIsArray($page->options);
}
/** @test */
public function it_tests_create_data()
{
$pages = Page::create(
[
'title' => "Another title dynamic column",
'content' => 'This is another page content ',
'options' => ['author' => 'Anonimous', 'okay'],
]
);
$this->assertCount(4, $pages);
}
}
每个 PageModelTest
方法 运行 也会 运行 setUpDatabase()
一次又一次。使第一个方法 it_tests_right_row_count
成功但其他方法 return 错误如下:
Halalsoft\LaravelDynamicColumn\Tests\PageModelTest::it_tests_get_dynamic_column_data
Illuminate\Database\QueryException: SQLSTATE[42S01]: Base table or
view already exists: 1050 Table 'pages' already exists (SQL: create
table pages
(id
int unsigned not null auto_increment primary key,
title
varchar(255) not null, content
text not null, options
blob
null))
我试图在两个 class 上添加 use RefreshDatabase;
但仍然 return 同样的错误。
我知道我可以检查 setUpDatabase()
上是否存在 table,但我认为这不是一个好习惯。
这是正常行为还是我的代码有问题?
我创建的测试用例实际上是从 Spatie 的大多数包中获得灵感的
总是在测试中创建新的 table。一个示例 laravel-backup,它还在 setUpDatabase
上创建了一个 table。但是我不知道 Spatie 是否在每个测试用例中都删除了数据库。这样我就可以回答我自己的问题了:
Its normal behavior or any wrong with my codes?
这是正常行为,我的代码没有错,但如果我不想创建 table 每个 运行 测试用例方法,则需要改进。
I know I can check if the table is exist on setUpDatabase()
but I don't think it's good practice.
也许这不是最佳做法,但也不是最差的做法。我看到的大多数 git 回购都是这样做的。所以我认为我的 repo/package.
也需要这样做
我只是想为 my laravel package 添加 PHPUnit 测试,但我不知道为什么 setUpDatabase()
从 TestCase
总是 运行 每个从 [= 扩展的测试14=] class.
这是我的 TestCase
class:
class TestCase extends BaseTestCase
{
protected function setUp(): void
{
parent::setUp();
$this->setUpDatabase();
}
protected function setUpDatabase()
{
$this->app['db']->connection()->getSchemaBuilder()->create(
'pages',
function(Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('content');
$table->binary('options')->nullable();
}
);
}
}
这是我的 PageModelTest
class :
class PageModelTest extends TestCase
{
public function setUp(): void
{
parent::setUp();
}
/** @test */
public function it_tests_right_row_count()
{
$pages = Page::all();
$this->assertCount(3, $pages);
}
/** @test */
public function it_tests_get_dynamic_column_data()
{
$page = Page::find(1);
$this->assertIsArray($page->options);
}
/** @test */
public function it_tests_create_data()
{
$pages = Page::create(
[
'title' => "Another title dynamic column",
'content' => 'This is another page content ',
'options' => ['author' => 'Anonimous', 'okay'],
]
);
$this->assertCount(4, $pages);
}
}
每个 PageModelTest
方法 运行 也会 运行 setUpDatabase()
一次又一次。使第一个方法 it_tests_right_row_count
成功但其他方法 return 错误如下:
Halalsoft\LaravelDynamicColumn\Tests\PageModelTest::it_tests_get_dynamic_column_data Illuminate\Database\QueryException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'pages' already exists (SQL: create table
pages
(id
int unsigned not null auto_increment primary key,title
varchar(255) not null,content
text not null,options
blob null))
我试图在两个 class 上添加 use RefreshDatabase;
但仍然 return 同样的错误。
我知道我可以检查 setUpDatabase()
上是否存在 table,但我认为这不是一个好习惯。
这是正常行为还是我的代码有问题?
我创建的测试用例实际上是从 Spatie 的大多数包中获得灵感的
总是在测试中创建新的 table。一个示例 laravel-backup,它还在 setUpDatabase
上创建了一个 table。但是我不知道 Spatie 是否在每个测试用例中都删除了数据库。这样我就可以回答我自己的问题了:
Its normal behavior or any wrong with my codes?
这是正常行为,我的代码没有错,但如果我不想创建 table 每个 运行 测试用例方法,则需要改进。
I know I can check if the table is exist on
setUpDatabase()
but I don't think it's good practice.
也许这不是最佳做法,但也不是最差的做法。我看到的大多数 git 回购都是这样做的。所以我认为我的 repo/package.
也需要这样做