Skip to content

Commit 655bd47

Browse files
committed
Update 补充对 RefreshDatabase Trait 的介绍
1 parent dd172f3 commit 655bd47

File tree

1 file changed

+14
-51
lines changed

1 file changed

+14
-51
lines changed

database-testing.md

+14-51
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
- [简介](#introduction)
44
- [每次测试后重置数据库](#resetting-the-database-after-each-test)
5-
- [使用迁移](#using-migrations)
6-
- [使用事务](#using-transactions)
75
- [创建模型工厂](#writing-factories)
86
- [工厂状态](#factory-states)
97
- [在测试中使用模型工厂](#using-factories)
@@ -33,28 +31,22 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
3331
<a name="resetting-the-database-after-each-test"></a>
3432
## 每次测试后重置数据库
3533

36-
在每次测试结束后都需要对数据进行重置,这样前面的测试数据就不会干扰到后面的测试。
37-
38-
<a name="using-migrations"></a>
39-
### 使用迁移
40-
41-
其中有一种方式就是在每次测试后都还原数据库,并在下次测试前运行迁移。Laravel 提供了简洁的 `DatabaseMigrations` trait,它会自动帮你处理好这些操作。你只需在测试类中使用此 trait 即可:
34+
在每次测试后重新设置数据库通常很有用,这样以前测试的数据不会干扰后续的测试。`RefreshDatabase` trait 会采用最优的方法来迁移你的测试数据库,这取决于你使用的是内存数据库还是传统数据库。在你的测试类中简单地引用这个 trait,一切都将为你处理:
4235

4336
<?php
4437

4538
namespace Tests\Feature;
4639

4740
use Tests\TestCase;
41+
use Illuminate\Foundation\Testing\RefreshDatabase;
4842
use Illuminate\Foundation\Testing\WithoutMiddleware;
49-
use Illuminate\Foundation\Testing\DatabaseMigrations;
50-
use Illuminate\Foundation\Testing\DatabaseTransactions;
5143

5244
class ExampleTest extends TestCase
5345
{
54-
use DatabaseMigrations;
46+
use RefreshDatabase;
5547

5648
/**
57-
* 基本的功能测试示例
49+
* 一个基本的功能测试示例
5850
*
5951
* @return void
6052
*/
@@ -66,43 +58,10 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
6658
}
6759
}
6860

69-
<a name="using-transactions"></a>
70-
### 使用事务
71-
72-
另一个方式,就是将每个测试案例都包含在数据库事务中。Laravel 提供了一个简洁的 `DatabaseTransactions` trait 来自动帮你处理好这些操作。
73-
74-
<?php
75-
76-
namespace Tests\Feature;
77-
78-
use Tests\TestCase;
79-
use Illuminate\Foundation\Testing\WithoutMiddleware;
80-
use Illuminate\Foundation\Testing\DatabaseMigrations;
81-
use Illuminate\Foundation\Testing\DatabaseTransactions;
82-
83-
class ExampleTest extends TestCase
84-
{
85-
use DatabaseTransactions;
86-
87-
/**
88-
* 基本的功能测试示例。
89-
*
90-
* @return void
91-
*/
92-
public function testBasicExample()
93-
{
94-
$response = $this->get('/');
95-
96-
// ...
97-
}
98-
}
99-
100-
> {note} 此 trait 的事务只包含默认的数据库连接。 如果你的应用程序使用多个数据库连接,你需要在你的测试类中定义一个 `$connectionsToTransact` 属性,然后你就可以把你测试中需要用到的数据库连接名称以数组的形式放到这个属性中。
101-
10261
<a name="writing-factories"></a>
10362
## 创建模型工厂
10463

105-
测试时,常常需要在运行测试之前写入一些数据到数据库中。创建测试数据时,除了手动的来设置每个字段的值,还可以使用 [Eloquent 模型](/docs/{{version}}/eloquent) 的「工厂」来设置每个属性的默认值。在开始之前,你可以先查看下应用程序的 `database/factories/UserFactory.php` 文件。此文件包含一个现成的模型工厂定义
64+
测试时,常常需要在运行测试之前写入一些数据到数据库中。创建测试数据时,除了手动的来设置每个字段的值,还可以使用 [Eloquent 模型](/docs/{{version}}/eloquent) 的「工厂」来设置每个属性的默认值。在开始之前,你可以先查看下应用程序的 `database/factories/UserFactory.php` 文件。此文件包含了一个现成的模型工厂定义
10665

10766
$factory->define(App\User::class, function (Faker\Generator $faker) {
10867
static $password;
@@ -115,9 +74,9 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
11574
];
11675
});
11776

118-
闭包内为模型工厂的定义,你可以返回模型中所有属性的默认测试值。在该闭包内会接收到 [Faker](https://github.com/fzaninotto/Faker) PHP 函数库的实例,它可以让你很方便的生成各种随机数据以进行测试
77+
在作为工厂定义的闭包中,你可以返回模型上所有属性的默认测试值。 闭包将接收 PHP 函数库 [Faker](https://github.com/fzaninotto/Faker) 的一个实例,它允许你方便地生成各种随机数据进行测试
11978

120-
为了更好的组织代码,你也可以自己为每个数据模型创建对应的模型工厂类。比如说,你可以在 `database/factories` 文件夹下创建 `UserFactory.php``CommentFactory.php` 文件。`factories` 目录中的文件都会被 Laravel 自动加载
79+
为了更好的组织代码,你也可以自己为每个数据模型创建对应的模型工厂类。例如,你可以在 `database/factories` 目录下创建 `UserFactory.php``CommentFactory.php` 文件。 Laravel 将会自动加载 `factories` 目录下的所有文件
12180

12281
<a name="factory-states"></a>
12382
### 工厂状态
@@ -135,8 +94,6 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
13594
'address' => $faker->address,
13695
];
13796
});
138-
139-
14097

14198
<a name="using-factories"></a>
14299
## 在测试中使用模型工厂
@@ -209,7 +166,7 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
209166

210167
#### 关联和属性闭包
211168

212-
你可以使用闭包参数来创建模型关联。例如如果你想在创建一个 `Post` 的顺便创建一个 `User` 实例:
169+
你可以使用闭包参数来创建模型关联。例如你想在创建一个 `Post` 时顺便创建一个 `User` 实例,可以这样定义
213170

214171
$factory->define(App\Post::class, function ($faker) {
215172
return [
@@ -247,6 +204,12 @@ Laravel 为你的 [PHPUnit](https://phpunit.de/) 测试提供了一些数据库
247204
`$this->assertDatabaseMissing($table, array $data);` | 断言表里没有指定数据。
248205
`$this->assertSoftDeleted($table, array $data);` | 断言指定记录已经被软删除。
249206

207+
## 译者署名
208+
209+
| 用户名 | 头像 | 职能 | 签名 |
210+
|---|---|---|---|
211+
| [@limxx](https://github.com/limxx) | <img class="avatar-66 rm-style" src="https://avatars0.githubusercontent.com/u/16585030?v=4&s=400"> | 翻译 | Winter is coming. |
212+
250213

251214
---
252215

0 commit comments

Comments
 (0)