Skip to content

Commit

Permalink
guide-ja/test-* revised [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
softark committed Apr 29, 2018
1 parent 3a11659 commit d339f6d
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 57 deletions.
15 changes: 10 additions & 5 deletions docs/guide-ja/rest-rate-limiting.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
* `saveAllowance()`: 許可されているリクエストの残り数と現在の UNIX タイムスタンプの両方を保存します。

ユーザ・テーブルに二つのカラムを追加して、許容されているリクエスト数とタイムスタンプの情報を記録するのが良いでしょう。
それらを定義すれば、`loadAllowance()``saveAllowance()` は、認証された現在のユーザに対応する二つのカラムの値を読み書きするものとして実装することが出来ます。
それらを定義すれば、`loadAllowance()``saveAllowance()` は、
認証された現在のユーザに対応する二つのカラムの値を読み書きするものとして実装することが出来ます。
パフォーマンスを向上させるために、これらの情報をキャッシュや NoSQL ストレージに保存することを検討しても構いません。

`User` モデルにおける実装は次のようなものになります。
Expand All @@ -38,10 +39,12 @@ public function saveAllowance($request, $action, $allowance, $timestamp)
}
```

アイデンティティのクラスに必要なインタフェイスを実装すると、Yii は [[yii\rest\Controller]] のアクション・フィルタとして構成された [[yii\filters\RateLimiter]] を使って、自動的にレート制限のチェックを行うようになります。
アイデンティティのクラスに必要なインタフェイスを実装すると、Yii は [[yii\rest\Controller]] のアクション・フィルタとして構成された
[[yii\filters\RateLimiter]] を使って、自動的にレート制限のチェックを行うようになります。
レート制限を超えると、レート・リミッタが [[yii\web\TooManyRequestsHttpException]] を投げます。

レート・リミッタは、REST コントローラ・クラスの中で、次のようにして構成することが出来ます。
レート・リミッタは、REST コントローラ・クラスの中で、
次のようにして構成することが出来ます。

```php
public function behaviors()
Expand All @@ -52,10 +55,12 @@ public function behaviors()
}
```

レート制限が有効にされると、デフォルトでは、送信される全てのレスポンスに、現在のレート制限の情報を含む次の HTTP ヘッダが付加されます。
レート制限が有効にされると、デフォルトでは、送信される全てのレスポンスに、
現在のレート制限の情報を含む次の HTTP ヘッダが付加されます。

* `X-Rate-Limit-Limit` - 一定期間内に許可されるリクエストの最大数
* `X-Rate-Limit-Remaining` - 現在の期間において残っている許可されているリクエスト数
* `X-Rate-Limit-Reset` - 許可されているリクエストの最大数にリセットされるまで待たなければならない秒数

これらのヘッダは、上記のコード例で示されているように、[[yii\filters\RateLimiter::enableRateLimitHeaders]]`false` に設定することで無効にすることが出来ます。
これらのヘッダは、上記のコード例で示されているように、[[yii\filters\RateLimiter::enableRateLimitHeaders]]
`false` に設定することで無効にすることが出来ます。
3 changes: 1 addition & 2 deletions docs/guide-ja/test-acceptance.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
受入テスト
==========

受入テストはユーザの視点からシナリオを検証するものです。
テストされるアプリケーションは PhpBrowser または実際のブラウザによってアクセスされます。
受入テストはユーザの視点からシナリオを検証するものです。テストされるアプリケーションは PhpBrowser または実際のブラウザによってアクセスされます。
どちらの場合でも、ブラウザは HTTP によって通信しますので、アプリケーションはウェブ・サーバによってホストされる必要があります。

受入テストは Codeception フレームワークの助けを借りて実装されています。Codeception フレームワークには優れたドキュメントがありますので、参照して下さい。
Expand Down
10 changes: 7 additions & 3 deletions docs/guide-ja/test-environment-setup.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
テスト環境の構築
================

Yii 2 は [`Codeception`](https://github.com/Codeception/Codeception) テスト・フレームワークとの統合を公式にサポートしており、次のタイプのテストを作成することを可能にしています。
Yii 2 は [`Codeception`](https://github.com/Codeception/Codeception) テスト・フレームワークとの統合を公式にサポートしており、
次のタイプのテストを作成することを可能にしています。

- [単体テスト](test-unit.md) - 一かたまりのコードが期待通りに動くことを検証する。
- [機能テスト](test-functional.md) - ブラウザのエミュレーションによって、ユーザの視点からシナリオを検証する。
- [受入テスト](test-acceptance.md) - ブラウザの中で、ユーザの視点からシナリオを検証する。

これら三つのタイプのテスト全てについて、Yii は、[`yii2-basic`](https://github.com/yiisoft/yii2-app-basic)[`yii2-advanced`](https://github.com/yiisoft/yii2-app-advanced) の両方のプロジェクト・テンプレートで、そのまま使えるテストセットを提供しています。
これら三つのタイプのテスト全てについて、Yii は、[`yii2-basic`](https://github.com/yiisoft/yii2-app-basic)
[`yii2-advanced`](https://github.com/yiisoft/yii2-app-advanced) の両方のプロジェクト・テンプレートで、
そのまま使えるテストセットを提供しています。

ベーシック・テンプレート、アドバンスト・テンプレートの両方とも、Codeception がプリ・インストールされて付いて来ます。
これらのテンプレートの一つを使っていない場合は、下記のコンソールコマンドを発行することで Codeception をインストールすることが出来ます。
これらのテンプレートの一つを使っていない場合は、下記のコンソールコマンドを発行することで
Codeception をインストールすることが出来ます。

```
composer require codeception/codeception
Expand Down
56 changes: 21 additions & 35 deletions docs/guide-ja/test-fixtures.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,21 +101,22 @@ class UserProfileFixture extends ActiveFixture
また、同じ理由によって、`UserFixture` は常に `UserProfileFixture` がアンロードされた後でアンロードされます。

上記では、DB テーブルに関してフィクスチャを定義する方法を示しました。
DB と関係しないフィクスチャ (例えば、何らかのファイルやディレクトリに関するフィクスチャ) を定義するためには、より汎用的な基底クラス [[yii\test\Fixture]] から拡張して、[[yii\test\Fixture::load()|load()]][[yii\test\Fixture::unload()|unload()]] のメソッドをオーバーライドすることが出来ます。
DB と関係しないフィクスチャ (例えば、何らかのファイルやディレクトリに関するフィクスチャ) を定義するためには、より汎用的な基底クラス [[yii\test\Fixture]] から拡張して、
[[yii\test\Fixture::load()|load()]][[yii\test\Fixture::unload()|unload()]] のメソッドをオーバーライドすることが出来ます。


## フィクスチャを使用する

[Codeception](http://codeception.com/) を使ってコードをテストしている場合は、フィクスチャのローディングとアクセスについては、
内蔵されているサポートを使用することが出来ます。

その他のテスト・フレームワークを使っている場合は、テスト・ケースで [[yii\test\FixtureTrait]] を使って同じ目的を達することが出来ます。
その他のテスト・フレームワークを使っている場合は、テスト・ケースで [[yii\test\FixtureTrait]]
を使って同じ目的を達することが出来ます。

次に、Codeception を使って `UserProfile` 単体テストクラスを書く方法を説明します。

`\Codeception\Test\Unit` を拡張するあなたの単体テスト・クラスにおいて、 `_fixtures()` メソッドの中で使いたいフィクスチャを宣言するか、
または、アクターの `haveFixtures()` メソッドを直接に使用します。
例えば、
または、アクターの `haveFixtures()` メソッドを直接に使用します。例えば、

```php
namespace app\tests\unit\models;
Expand Down Expand Up @@ -149,17 +150,17 @@ class UserProfileTest extends \Codeception\Test\Unit
クラス名あるいはフィクスチャを指す構成情報配列を使うことが出来ます。
構成情報配列を使うと、フィクスチャがロードされるときのフィクスチャのプロパティをカスタマイズすることが出来ます。

また、フィクスチャにエイリアスを割り当てることも出来ます。
上記の例では、`UserProfileFixture``profiles` というエイリアスが与えられています。
そうすると、テスト・メソッドの中でエイリアスを使ってフィクスチャ・オブジェクトにアクセスすることが出来るようになります。
例えば、
また、フィクスチャにエイリアスを割り当てることも出来ます。上記の例では、`UserProfileFixture``profiles` というエイリアスが与えられています。
そうすると、テスト・メソッドの中でエイリアスを使ってフィクスチャ・オブジェクトにアクセスすることが出来るようになります。例えば、

```php
$profile = $I->grabFixture('profiles', 'user1');
```

`UserProfileFixture` オブジェクトを返します。

さらには、`UserProfileFixture``ActiveFixture` を拡張するものですので、フィクスチャによって提供されたデータに対して、次の構文を使ってアクセスすることも出来ます。
さらには、`UserProfileFixture``ActiveFixture` を拡張するものですので、フィクスチャによって提供されたデータに対して、
次の構文を使ってアクセスすることも出来ます。

```php
// 'user1' というエイリアスのデータ行に対応する UserProfileModel を返す
Expand Down Expand Up @@ -195,7 +196,6 @@ data\

このようにして、テスト間でフィクスチャのデータ・ファイルが衝突するのを回避し、必要に応じてデータ・ファイルを使い分けます。


> Note: 上の例では、フィクスチャ・ファイルには例示目的だけの名前が付けられています。
> 実際の仕事では、フィクスチャ・クラスがどのフィクスチャ・クラスを拡張したものであるかに従って名前を付けるべきです。
> 例えば、DB フィクスチャを [[yii\test\ActiveFixture]] から拡張している場合は、DB テーブルの名前をフィクスチャのデータ・ファイル名として使うべきです。
Expand All @@ -217,8 +217,7 @@ Yii は `yii fixture` コマンドライン・ツールでフィクスチャを
次のようなフィクスチャ・データをロードするとしましょう。

```
# users.php ファイル
# フィクスチャ・データ・パス (デフォルトでは @tests\unit\fixtures\data) に保存されている
# users.php ファイル - フィクスチャ・データ・パス (デフォルトでは @tests\unit\fixtures\data) に保存
return [
[
Expand All @@ -237,33 +236,26 @@ return [
],
];
```

データベースにデータをロードするフィクチャを使う場合は、これらの行が `users` テーブルに対して適用されます。
NoSQL フィクスチャ、例えば `mongodb` フィクチャを使う場合は、このデータは `users` コレクションに対して適用されます。
データベースにデータをロードするフィクチャを使う場合は、これらの行が `users` テーブルに対して適用されます。NoSQL フィクスチャ、例えば `mongodb` フィクチャを使う場合は、このデータは `users` コレクションに対して適用されます。
さまざまなロード戦略を実装する方法などについて公式 [ドキュメント](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixtures.md)を参照して下さい。
上記のフィクスチャのサンプルは `yii2-faker` エクステンションによって生成されました。これについての詳細は、[自動生成のセクション](#auto-generating-fixtures) を参照して下さい。

フィクスチャ・クラスの名前は複数形であってはいけません。

### フィクスチャをロードする

フィクスチャ・クラスは `Fixture` という接尾辞を持たなければいけません。
デフォルトでは、フィクスチャは `tests\unit\fixtures` 名前空間の下で探されます。
この挙動は構成またはコマンド・オプションによって変更することが出来ます。
`-User` のように名前の前に `-` を指定することで、ロードまたはアンロードから除外するフィクスチャを指定することが出来ます。
フィクスチャ・クラスは `Fixture` という接尾辞を持たなければいけません。デフォルトでは、フィクスチャは `tests\unit\fixtures` 名前空間の下で探されます。
この挙動は構成またはコマンド・オプションによって変更することが出来ます。`-User` のように名前の前に `-` を指定することで、ロードまたはアンロードから除外するフィクスチャを指定することが出来ます。

フィクスチャをロードするためには、次のコマンドを実行します。

> Note: データをロードする前に、アンロードのシーケンスが実行されます。これによって、通常は、前に実行されたフィクスチャによって挿入された
既存のデータが全てクリーンアップされることになります。
> Note: データをロードする前に、アンロードのシーケンスが実行されます。これによって、通常は、前に実行されたフィクスチャによって挿入された 既存のデータが全てクリーンアップされることになります。
```
yii fixture/load <fixture_name>
```

要求される `fixture_name` パラメータが、データがロードされるフィクスチャの名前を指定するものです。
いくつかのフィクスチャを一度にロードすることが出来ます。
下記はこのコマンドの正しい形式です。
いくつかのフィクスチャを一度にロードすることが出来ます。下記はこのコマンドの正しい形式です。

```
// `User` フィクスチャをロードする
Expand All @@ -284,14 +276,11 @@ yii fixture "*"
// 一つを除いて全てのフィクスチャをロードする
yii fixture "*, -DoNotLoadThisOne"
// 異なる名前空間からフィクスチャをロードする
// デフォルトの名前空間は tests\unit\fixtures
// 異なる名前空間からフィクスチャをロードする (デフォルトの名前空間は tests\unit\fixtures)
yii fixture User --namespace='alias\my\custom\namespace'
// 他のフィクスチャをロードする前に、グローバルフィクスチャ
// `some\name\space\CustomFixture` をロードする。
// デフォルトでは、このオプションが `InitDbFixture` について適用され、
// 整合性チェックが無効化/有効化されます。
// 他のフィクスチャをロードする前に、グローバルフィクスチャ `some\name\space\CustomFixture` をロードする。
// デフォルトでは、このオプションが `InitDbFixture` について適用され、整合性チェックが無効化/有効化されます。
// カンマで区切って複数のグローバル・フィクスチャを指定することが出来ます。
yii fixture User --globalFixtures='some\name\space\Custom'
```
Expand All @@ -301,9 +290,7 @@ yii fixture User --globalFixtures='some\name\space\Custom'
フィクスチャをアンロードするためには、次のコマンドを実行します。

```
// Users フィクスチャをアンロードする。
// デフォルトではフィクスチャのストレージをクリアします。
// 例えば、"users" テーブル、または、mongodb フィクスチャなら "users" コレクションがクリアされます。
// Users フィクスチャをアンロードする。デフォルトではフィクスチャのストレージをクリアします。(例えば、"users" テーブル、または、mongodb フィクスチャなら "users" コレクションがクリアされます。)
yii fixture/unload User
// いくつかのフィクスチャをアンロードする
Expand Down Expand Up @@ -340,8 +327,7 @@ yii fixture/unload "*, -DoNotUnloadThisOne"

### フィクスチャを自動生成する

Yii は、あなたの代りに、何らかのテンプレートに従ってフィクスチャを自動生成することが出来ます。
さまざまなデータで、また、いろいろな言語と形式で、フィクスチャを生成することが出来ます。
Yii は、あなたの代りに、何らかのテンプレートに従ってフィクスチャを自動生成することが出来ます。さまざまなデータで、また、いろいろな言語と形式で、フィクスチャを生成することが出来ます。
この機能は、[Faker](https://github.com/fzaninotto/Faker) ライブラリと `yii2-faker` エクステンションによって実現されています。
詳細については、エクステンションの [ガイド](https://github.com/yiisoft/yii2-faker/tree/master/docs/guide-ja) を参照して下さい。.

Expand Down
3 changes: 2 additions & 1 deletion docs/guide-ja/test-functional.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
POST や GET のパラメータなどの環境変数を設定しておいてから、アプリケーションのインスタンスをコードから直接に実行します。

機能テストは一般的に受入テストより高速であり、失敗した場合に詳細なスタックトレースを提供してくれます。
経験則から言うと、特別なウェブ・サーバ設定や JavaScript による複雑な UI を持たない場合は、機能テストの方を選ぶべきです。
経験則から言うと、特別なウェブ・サーバ設定や JavaScript による複雑な UI を持たない場合は、
機能テストの方を選ぶべきです。

機能テストは Codeception フレームワークの助けを借りて実装されています。これにつては、優れたドキュメントがあります。

Expand Down
Loading

0 comments on commit d339f6d

Please sign in to comment.