2
2
3
3
- [ 简介] ( #introduction )
4
4
- [ 每次测试后重置数据库] ( #resetting-the-database-after-each-test )
5
- - [ 使用迁移] ( #using-migrations )
6
- - [ 使用事务] ( #using-transactions )
7
5
- [ 创建模型工厂] ( #writing-factories )
8
6
- [ 工厂状态] ( #factory-states )
9
7
- [ 在测试中使用模型工厂] ( #using-factories )
@@ -33,28 +31,22 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
33
31
<a name =" resetting-the-database-after-each-test " ></a >
34
32
## 每次测试后重置数据库
35
33
36
- 在每次测试结束后都需要对数据进行重置,这样前面的测试数据就不会干扰到后面的测试。
37
-
38
- <a name =" using-migrations " ></a >
39
- ### 使用迁移
40
-
41
- 其中有一种方式就是在每次测试后都还原数据库,并在下次测试前运行迁移。Laravel 提供了简洁的 ` DatabaseMigrations ` trait,它会自动帮你处理好这些操作。你只需在测试类中使用此 trait 即可:
34
+ 在每次测试后重新设置数据库通常很有用,这样以前测试的数据不会干扰后续的测试。` RefreshDatabase ` trait 会采用最优的方法来迁移你的测试数据库,这取决于你使用的是内存数据库还是传统数据库。在你的测试类中简单地引用这个 trait,一切都将为你处理:
42
35
43
36
<?php
44
37
45
38
namespace Tests\Feature;
46
39
47
40
use Tests\TestCase;
41
+ use Illuminate\Foundation\Testing\RefreshDatabase;
48
42
use Illuminate\Foundation\Testing\WithoutMiddleware;
49
- use Illuminate\Foundation\Testing\DatabaseMigrations;
50
- use Illuminate\Foundation\Testing\DatabaseTransactions;
51
43
52
44
class ExampleTest extends TestCase
53
45
{
54
- use DatabaseMigrations ;
46
+ use RefreshDatabase ;
55
47
56
48
/**
57
- * 基本的功能测试示例 。
49
+ * 一个基本的功能测试示例 。
58
50
*
59
51
* @return void
60
52
*/
@@ -66,43 +58,10 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
66
58
}
67
59
}
68
60
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
-
102
61
<a name =" writing-factories " ></a >
103
62
## 创建模型工厂
104
63
105
- 测试时,常常需要在运行测试之前写入一些数据到数据库中。创建测试数据时,除了手动的来设置每个字段的值,还可以使用 [ Eloquent 模型] ( /docs/{{version}}/eloquent ) 的「工厂」来设置每个属性的默认值。在开始之前,你可以先查看下应用程序的 ` database/factories/UserFactory.php ` 文件。此文件包含一个现成的模型工厂定义 :
64
+ 测试时,常常需要在运行测试之前写入一些数据到数据库中。创建测试数据时,除了手动的来设置每个字段的值,还可以使用 [ Eloquent 模型] ( /docs/{{version}}/eloquent ) 的「工厂」来设置每个属性的默认值。在开始之前,你可以先查看下应用程序的 ` database/factories/UserFactory.php ` 文件。此文件包含了一个现成的模型工厂定义 :
106
65
107
66
$factory->define(App\User::class, function (Faker\Generator $faker) {
108
67
static $password;
@@ -115,9 +74,9 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
115
74
];
116
75
});
117
76
118
- 闭包内为模型工厂的定义,你可以返回模型中所有属性的默认测试值。在该闭包内会接收到 [ Faker] ( https://github.com/fzaninotto/Faker ) PHP 函数库的实例,它可以让你很方便的生成各种随机数据以进行测试 。
77
+ 在作为工厂定义的闭包中,你可以返回模型上所有属性的默认测试值。 闭包将接收 PHP 函数库 [ Faker] ( https://github.com/fzaninotto/Faker ) 的一个实例,它允许你方便地生成各种随机数据进行测试 。
119
78
120
- 为了更好的组织代码,你也可以自己为每个数据模型创建对应的模型工厂类。比如说 ,你可以在 ` database/factories ` 文件夹下创建 ` UserFactory.php ` 和 ` CommentFactory.php ` 文件。在 ` factories ` 目录中的文件都会被 Laravel 自动加载 。
79
+ 为了更好的组织代码,你也可以自己为每个数据模型创建对应的模型工厂类。例如 ,你可以在 ` database/factories ` 目录下创建 ` UserFactory.php ` 和 ` CommentFactory.php ` 文件。 Laravel 将会自动加载 ` factories ` 目录下的所有文件 。
121
80
122
81
<a name =" factory-states " ></a >
123
82
### 工厂状态
@@ -135,8 +94,6 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
135
94
'address' => $faker->address,
136
95
];
137
96
});
138
-
139
-
140
97
141
98
<a name =" using-factories " ></a >
142
99
## 在测试中使用模型工厂
@@ -209,7 +166,7 @@ Laravel 提供了多种有用的工具来让你更容易的测试使用数据库
209
166
210
167
#### 关联和属性闭包
211
168
212
- 你可以使用闭包参数来创建模型关联。例如如果你想在创建一个 ` Post ` 的顺便创建一个 ` User ` 实例:
169
+ 你可以使用闭包参数来创建模型关联。例如你想在创建一个 ` Post ` 时顺便创建一个 ` User ` 实例,可以这样定义 :
213
170
214
171
$factory->define(App\Post::class, function ($faker) {
215
172
return [
@@ -247,6 +204,12 @@ Laravel 为你的 [PHPUnit](https://phpunit.de/) 测试提供了一些数据库
247
204
` $this->assertDatabaseMissing($table, array $data); ` | 断言表里没有指定数据。
248
205
` $this->assertSoftDeleted($table, array $data); ` | 断言指定记录已经被软删除。
249
206
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
+
250
213
251
214
---
252
215
0 commit comments