Ujian HTTP
Laravel menyediakan API yang sangat lancar untuk kedua-dua penjanaan permintaan HTTP dan pemeriksaan output. Sebagai contoh, anda boleh menyemak kes ujian ini di bawah: Kaedah 你可以使用 {tip} 运行测试时,CSRF 中间件会自动禁用。 Laravel 提供了几个可在 HTTP 测试时使用 Session 的辅助函数。首先,你需要传递一个数组给 当然,一般使用 Session 时都是用于维护用户状态,如认证用户。 你也可以通过传递看守器名称作为 Laravel 也提供了几个辅助函数来测试 JSON APIs 和他们的响应。 例如, {tip} 如果你想验证给定的数组 完全 匹配应用返回的 JSON 结果,你应该使用 在使用 除创建图像外,你也可以用 Apabila menggunakan < kaedah kod>palsu untuk mencipta fail, anda boleh menentukan lebar, ketinggian dan saiz imej untuk mengesahkan peraturan ujian dengan lebih baik: Laravel menyediakan pelbagai kaedah penegasan biasa untuk ujian PHPUnit. Penegasan ini boleh diakses daripada kaedah ujian: assertCookie Tegaskan bahawa respons mengandungi kuki yang diberikan dan bahawa ia telah tamat tempoh: Assert CookieNotExpired mempunyai kuki yang diberimempunyai kuki yang diberikan dan ia mengandungi: assert data yang diberikan tepat dalam data JSONrr yang terkandung dalam jawapan yang diberikan Tegaskan bahawa yang diberikan tidak ada dalam Tajuk respons: Tegaskan bahawa respons mengandungi Data JSON yang diberikan: sertJsonMissingExactTegaskan bahawa respons tidak mengandungi serpihan JSON yang tepat: assertJsonMissingValidationErrorsTegaskan bahawa respons tidak mengandungi JSON untuk ralat Pengesahan kunci yang diberikan: Tegaskan bahawa respons mempunyai struktur JSON yang diberikan: Tegaskan bahawa respons mempunyai ralat pengesahan JSON yang diberikan untuk kunci yang diberikan: assertLocation nilai URI yang diberikan dalam kepala URI yang diberikan Tegaskan bahawa respons mengandungi kuki yang diberikan (tidak disulitkan): Tegaskan bahawa respons akan diubah hala ke URI yang diberikan: Tegaskan bahawa rentetan yang diberikan adalah terkandung dalam teks respons : assertSeeTextInOrder Tegaskan bahawa rentetan yang diberikan terkandung dalam teks respons mengikut urutan: assertSessionHasAllTegaskan bahawa sesi itu mengandungi senarai nilai yang diberikan: Tegaskan bahawa sesi itu mengandungi ralat untuk medan tertentu: Tegaskan bahawa sesi itu mempunyai ralat yang diberikan: Tegaskan Tegaskan sesi tiada ralat: assertSessionDoesntHaveErrors Tegaskan bahawa sesi tidak mempunyai ralat kunci yang diberikan: assertSessionMissingTegaskan bahawa sesi itu tidak mengandungi kunci yang diberikan: Tegaskan bahawa respons mempunyai kod status yang diberikan: Tegaskan bahawa respons mempunyai kod status kejayaan Pengenalan
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class ExampleTest extends TestCase{
/**
* 一个基础的测试用例。
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
get
mencipta permintaan GET
kepada aplikasi anda dan assertStatus
Kaedah ini menegaskan bahawa respons yang dikembalikan ialah kod status HTTP yang ditentukan. Sebagai tambahan kepada pernyataan mudah ini, Laravel juga termasuk pelbagai pernyataan yang menyemak pengepala respons, kandungan, JSON, struktur, dll. get
方法会创建一个 GET
请求来请求你的应用,而 assertStatus
方法断言返回的响应是指定的 HTTP 状态码。 除了这个简单的断言之外, Laravel 也包含检查响应标头、内容、JSON、结构等各种断言。自定义请求头
withHeaders
方法在发送到应用程式之前自定义请求的标头。 你可以添加想要的任何自定义标头。<?php
class ExampleTest extends TestCase{
/**
* 一个基础的功能测试用例。
*
* @return void
*/
public function testBasicExample()
{
$response = $this->withHeaders([
'X-Header' => 'Value',
])->json('POST', '/user', ['name' => 'Sally']);
$response
->assertStatus(201)
->assertJson([
'created' => true,
]);
}
}
Session / 认证
withSession
方法来设置 Session 数据。这让你在应用程序的测试请求发送之前,先给数据加载 Session 变得简单:<?php
class ExampleTest extends TestCase{
public function testApplication()
{
$response = $this->withSession(['foo' => 'bar'])
->get('/');
}
}
actingAs
辅助函数提供了简单的方法来指定的用户认证为当前用户。 例如, 我们可以使用 工厂模型 来生成并认证用户:<?php
use App\User;
class ExampleTest extends TestCase{
public function testApplication()
{
$user = factory(User::class)->create();
$response = $this->actingAs($user)
->withSession(['foo' => 'bar'])
->get('/');
}
}
actingAs
的第二参数以指定用户通过哪种看守器来认证:$this->actingAs($user, 'api')
测试 JSON APIs
json
, get
, post
, put
, patch
,和 delete
可以被用于发送各种 HTTP 动作。 你也可以轻松地将数据和请求头传递到这些方法中。让我们写一个 POST
请求到 /user
并断言返回期望的数据来开始使用他们:<?php
class ExampleTest extends TestCase{
/**
* 一个简单的功能测试用例。
*
* @return void
*/
public function testBasicExample()
{
$response = $this->json('POST', '/user', ['name' => 'Sally']);
$response
->assertStatus(201)
->assertJson([
'created' => true,
]);
}
}
assertJson
方法将响应转换为数组并利用 PHPUnit::assertArraySubset
来验证给定的数组存在于应用返回的 JSON 响应中。 所以,如果 JSON 响应中有其他属性,测试仍旧会在给定数组存在的情况下通过:验证完全匹配
assertExactJson
Menyesuaikan pengepala permintaan
Anda boleh menggunakan The kaedah withHeaders
menyesuaikan pengepala permintaan sebelum menghantarnya ke aplikasi. Anda boleh menambah sebarang pengepala tersuai yang anda mahukan. <?php
class ExampleTest extends TestCase{
/**
* 一个基本的功能测试用例。
*
* @return void
*/
public function testBasicExample()
{
$response = $this->json('POST', '/user', ['name' => 'Sally']);
$response
->assertStatus(201)
->assertExactJson([
'created' => true,
]);
}
}
withSession
untuk menetapkan data Sesi. Ini memudahkan anda memuatkan Sesi dengan data sebelum menghantar permintaan ujian aplikasi: 🎜<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class ExampleTest extends TestCase{
public function testAvatarUpload()
{
Storage::fake('avatars');
$file = UploadedFile::fake()->image('avatar.jpg');
$response = $this->json('POST', '/avatar', [
'avatar' => $file,
]);
// 断言文件已经存储 . . .
Storage::disk('avatars')->assertExists($file->hashName());
// 断言文件不存在 . . .
Storage::disk('avatars')->assertMissing('missing.jpg');
}
}
🎜 Sudah tentu, Sesi biasanya digunakan untuk mengekalkan status pengguna, seperti mengesahkan pengguna. Fungsi pembantu actingAs
menyediakan cara mudah untuk menentukan pengguna untuk disahkan sebagai pengguna semasa. Sebagai contoh, kita boleh menggunakan model kilang untuk menjana dan mengesahkan pengguna: 🎜UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);
🎜Anda juga boleh menentukan pemerhati yang mana pengguna disahkan dengan menghantar nama pemerhati sebagai parameter kedua actingAs
: 🎜UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);
🎜🎜🎜json
, get
, post
, let
, patch
dan < kod >padam boleh digunakan untuk menghantar pelbagai tindakan HTTP. Anda juga boleh menghantar data dan meminta pengepala ke dalam kaedah ini dengan mudah. Mari kita mula menggunakannya dengan menulis permintaan POST
kepada /user
dan menegaskan kembali data yang dijangkakan: 🎜$response->assertCookie($cookieName, $value = null);
🎜{tip}
🎜🎜🎜assertJson
Kaedah menukarkan respons kepada tatasusunan dan menggunakan PHPUnit::assertArraySubset
untuk mengesahkan bahawa tatasusunan yang diberikan hadir dalam respons JSON yang dikembalikan oleh aplikasi. Jadi, jika terdapat atribut lain dalam respons JSON, ujian masih akan lulus memandangkan kehadiran tatasusunan: 🎜Sahkan Padanan Tepat
🎜Jika anda ingin mengesahkan bahawa tatasusunan yang diberikan tepat sepadan dengan hasil JSON yang dikembalikan oleh aplikasi anda, anda harus menggunakan assertExactJson
Kaedah: 🎜$response->assertCookieExpired($cookieName);
🎜🎜🎜🎜🎜🎜Uji muat naik fail
palsu
fasad Storage
untuk memudahkan ujian muat naik fail. Sebagai contoh, anda boleh menggabungkan dua fungsi untuk menguji borang muat naik avatar dengan mudah: IlluminateHttpUploadedFile
提供了一个 fake
方法用于生成虚拟的文件或者图像以供测试之用。 它可以和 Storage
facade 的 fake
方法相结合, 大幅度简化了文件上传测试。举个例子,你可以结合这两者的功能非常方便地进行头像上传表单测试:$response->assertCookieNotExpired($cookieName);
虚拟文件制定
fake
方法创建文件时,你可以指定图像的宽高以及大小,从而更好的验证测试规则:$response->assertCookieMissing($cookieName);
create
$response->assertDontSee($value);
Formulasi fail maya
$response->assertDontSeeText($value);
Selain mencipta imej, anda juga boleh menggunakan create< /code> kaedah untuk mencipta jenis fail lain:
$response->assertExactJson(array $data);
🎜🎜🎜🎜Penegasan Balasan
json
, get
, post
, put
,和 delete
assertCookieExpired
assertCookieNotExpired
assertCookie tegaskan tDontSeeText
assertExactJson
assertForbidden
assertHeader
assertHeaderMissing
assertJson
assertJsonCount
assertJsonFragment
assertJsonMissing
actassertJsonCount
assertJsonFragment
assertJsonMissing
actassertMissing JsonMissingValidationErrors.
assertredirect
assertsee
assertseeinorder
assertseetext
assertseetextinorder
assertsessionHas
assertSessionHasall
assertsessionHaserRors
assertSessionHaserrorsin
assertSessionHasnoerrorserSessiesSessionDaveShaveRorshineDaveShaveRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRorshineRors assertStatus
assertBerjaya
assertViewHas
assertViewHasAll
assertViewIs
assertViewHas
assertViewHasAll
assertViewIs
assertView
assertCookieTegaskan bahawa kuki yang diberikan disertakan dalam respons: $response->assertForbidden();
assertCookieExpired
$response->assertHeader($headerName, $value = null);
assertCookieNotExpired
$response->assertHeaderMissing($headerName);
$response->assertJson(array $data);
eassertdontseeassert bahawa rentetan yang diberikan tidak termasuk dalam respons: $response->assertJsonCount($count, $key = null);
e assertDontSeeText$response->assertJsonFragment(array $data);
assertExactJsonassertExactJson$response->assertJsonMissing(array $data);
assertJson$response->assertJsonMissingExact(array $data);
Tegaskan bahawa tindak balas JSON mengandungi tatasusunan yang Diharapkan untuk kunci yang diberikan Bilangan elemen: $response->assertJsonMissingValidationErrors($keys);
$response->assertJsonStructure(array $structure);
$response->assertJsonValidationErrors($keys);
$response->assertLocation($uri);
assertJsonValidationErrors
$response->assertNotFound();
assertLocation
Location
$response->assertOk();
assertRedirect$response->assertPlainCookie($cookieName, $value = null);
Tegaskan bahawa yang diberikan rentetan terkandung dalam Medium respons: $response->assertRedirect($uri);
assertSeeInOrderTegaskan bahawa rentetan yang diberikan terkandung dalam teks respons: $response->assertSee($value);
$response->assertSeeInOrder(array $values);
$response->assertSeeText($value);
assertSessionHasAllTegaskan bahawa sesi itu mengandungi senarai nilai yang diberikan: $response->assertSeeTextInOrder(array $values);
$response->assertSessionHas($key, $value = null);
$response->assertSessionHasAll(array $data);
$response->assertSessionHasErrors(array $keys, $format = null, $errorBag = 'default');
$response->assertSessionHasErrorsIn($errorBag, $keys = [], $format = null);
$response->assertSessionHasNoErrors();
$response->assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default');
$response->assertSessionMissing($key);
🎜🎜🎜🎜🎜🎜🎜assertStatus
$response->assertStatus($code);
assertSuccessful
Tegaskan respons paparan ialah sekeping data yang diberikan:
$response->assertSuccessful();
Tegaskan bahawa paparan respons mempunyai senarai data yang diberikan:
$response->assertViewHas($key, $value = null);
laluan ssert mengembalikan pandangan yang diberikan :$response->assertViewHasAll(array $data);
assertViewMissingTegaskan bahawa paparan respons tiada sekeping data yang mengikat: $response->assertViewIs($value);
Pengesahan menyediakan anda dengan PHPUnit Pengujian menyediakan pelbagai Penegasan berkaitan pengesahan:
PeneranganKaedah $this->assertAuthenticated($guard = null);
断言此用户已被认证。 $this->assertGuest($guard = null);
断言此用户未被认证。 $this->assertAuthenticatedAs($user, $guard = null);
断言给定的用户被认证。 $this->assertCredentials(array $credentials, $guard = null);
断言给定的凭证有效。 $this->assertInvalidCredentials(array $credentials, $guard = null);
telah disahkan pengguna