テスト


余分なコード行を記述するたびに、潜在的な新しいバグが追加されることになります。より優れた、より信頼性の高いプログラムを構築するには、コードに対して機能テストと単体テストを使用する必要があります。

PHPUnit テスト フレームワーク

Symfony は、PHPUnit という名前の独立したクラス ライブラリを統合して、豊富なテスト フレームワークを提供します。この章では PHPUnit 自体については説明しませんが、独自の 優れたドキュメント があります。

PHPUnit の最新の安定バージョンを使用することをお勧めします。 は PHAR とともにインストールされます。

すべてのテストは、単体テストであろうと機能テストであろうと、PHP クラスであり、バンドルの Tests/ サブディレクトリに保存されます。この原則に従う場合は、すべてのプログラム レベルのテストを実行するときに、次のコマンドを実行するだけです:

##

PHPunit は、Symfony ルート ディレクトリの phpunit.xml.dist ファイルを通じて設定されます。

コード カバレッジは、—coverage-* オプションを使用して生成できます。ヘルプ情報を表示するには、—help を使用してさらに多くのコンテンツを表示します。

単体テスト

単体テストは、単一の PHP クラスのテストです。このクラスは「ユニット (unit)」とも呼ばれます。 )」。アプリケーション階層の全体的な動作をテストする必要がある場合は、機能テスト (#catalog2) を参照してください。

Symfony 単体テストの作成は、標準の PHPUnit 単体テストの作成と何ら変わりません。アプリ バンドルの Util/ ディレクトリに Calculator という名前の非常に単純なクラスがあるとします。

// src/AppBundle/Util/Calculator.phpnamespace AppBundle\Util; class Calculator{
    public function add($a, $b)
    {
        return $a + $b;
    }}

これをテストするには、CalculatorTest を作成します。 バンドルの tests/AppBundle/Util ディレクトリにファイルを保存します:

// tests/AppBundle/Util/CalculatorTest.phpnamespace Tests\AppBundle\Util; use AppBundle\Util\Calculator; class CalculatorTest extends \PHPUnit_Framework_TestCase{
    public function testAdd()
    {
        $calc = new Calculator();
        $result = $calc->add(30, 12);         // assert that your calculator added the numbers correctly!
        $this->assertEquals(42, $result);
    }}


契約に従って、 Tests/AppBundle ディレクトリを、バンドルの下の単体テスト ファイルが配置されているディレクトリにコピーする必要があります。したがって、テストするクラスが src/AppBundle/Util ディレクトリにある場合は、テスト コードを tests/AppBundle/Util/ ディレクトリに置きます。



実際のプログラムと同じように、自動ロードは自動的に有効になり、bootstrap.php.cache ファイルによって完了します (この部分は設定です。デフォルトはapp/phpunit.xml.dist ファイル内)

指定されたファイルまたはディレクトリのテストも非常に簡単です:

# run all tests of the application# 运行程序中的所有测试$  phpunit
 # run all tests in the Util directory# 运行指定目录下的所有测试$  phpunit tests/AppBundle/Util
 # run tests for the Calculator class# 仅运行Calculator类的测试$  phpunit tests/AppBundle/Util/CalculatorTest.php
 # run all tests for the entire Bundle# 运行整个bundle的测试$  phpunit tests/AppBundle/

機能テスト

機能テストでは、プログラムのさまざまなレベル (ルーティングからビューまで) の統合をチェックします。これらのレベル自体は PHPUnit の介入によって変化しませんが、独自のワークフローがあります:

  • Make a request;

  • Test response (応答);

  • #リンクをクリックするか、フォームを送信します;

  • テスト応答;

  • クリアして繰り返します。

最初の機能テスト

機能テストは、

Test/AppBundle/Controller ディレクトリに保存されます。 PHPファイル。 PostController によって処理されるページをテストする場合は、まず新しい PostControllerTest.php ファイルを作成し、特別な WebTestCase クラスを継承します。

ルーチンとして、このテストは次のコードのようになります:

// tests/AppBundle/Controller/PostControllerTest.phpnamespace Tests\AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class PostControllerTest extends WebTestCase{
    public function testShowPost()
    {
        $client = static::createClient();         $crawler = $client->request('GET', '/post/hello-world');         $this->assertGreaterThan(
            0,
            $crawler->filter('html:contains("Hello World")')->count()
        );
    }}


##上記の機能テストを実行するには、
WebTestCase

クラスはプログラムのカーネルを開始します。ほとんどの場合、これは自動的に行われます。ただし、カーネルが標準以外のディレクトリにある場合は、phpunit.xml.dist ファイルを調整し、KERNEL_DIR 環境変数をカーネル ディレクトリにリセットする必要があります。

<?xml version="1.0" charset="utf-8" ?><phpunit>
    <php>
        <server name="KERNEL_DIR" value="/path/to/your/app/" />
    </php>
    <!-- ... --></phpunit>


createClient()

このメソッドはクライアントを返します。これを使用してブラウザをシミュレートし、Web サイトのページをクロールできるようにします。

1
$  phpunit
1
$crawler = $client->request('GET', '/post/hello-world');

request() メソッド (その他のリクエスト メソッドを参照) は、使用される Crawler オブジェクトを返します。応答コンテンツから要素を選択し、リンクのクリックやフォームの送信などのアクションを完了します。

クローラーが機能するには、応答情報が XML または HTML ドキュメント形式である必要があります。ドキュメント形式のない生のコンテンツが必要な場合は、$client->getResponse()->getContent() を使用してください。

リンクをクリックする必要がある場合は、まずグラバーを使用してリンクを選択します。XPath 式または CSS ピッカーを使用して選択を完了し、クライアントの動作を使用してリンクをクリックします。

$link = $crawler
    ->filter('a:contains("Greet")') // 选择所有含有"Greet"文本之链接
    ->eq(1) // 结果列表中的第二个
    ->link() // 点击它; $crawler = $client->click($link);

フォームの送信は非常に似ています。フォーム ボタンを選択し、必要に応じて一部のフォーム項目の値を上書きして、対応するフォームを送信します。

$form = $crawler->selectButton('submit')->form(); // 设置一些值$form['name'] = 'Lucas';$form['form_name[subject]'] = 'Hey there!'; // 提交表单$crawler = $client->submit($form);

フォームのアップロードも処理でき、さまざまなタイプのフォーム フィールドに入力するためのメソッド (select()tick() など) が含まれています。詳細については、次のセクション「フォーム」を参照してください。

これで、アサーションを使用してページが期待どおりに動作するかどうかをテストして、プログラム内を簡単に移動できるようになります。クローラーを使用してアサーションを DOM 上で動作させます。

// Assert that the response matches a given CSS selector.// 断言响应内容匹配到一个指定的CSS拾取器$this->assertGreaterThan(0, $crawler->filter('h1')->count());

または、コンテンツに特定のテキストが含まれているかどうかを確認したいだけの場合、または応答コンテンツが XML/HTML 形式ではないことを知りたいだけの場合は、応答コンテンツを直接テストします。

$this->assertContains(
    'Hello World',
    $client->getResponse()->getContent());

有用なアサーション

テストをできるだけ早くマスターできるように、次の例では、最も一般的に使用される有用なテスト アサーションをリストします。 ## HTTP ステータス コード定数は Symfony 2.4 から導入されました

テスト クライアントを使用する

テスト クライアント (テスト クライアント) は、ブラウザと同様の HTTP クライアントであり、Symfony プログラムへのリクエストを生成できます。

use Symfony\Component\HttpFoundation\Response; // ... // Assert that there is at least one h2 tag// with the class "subtitle"// 断言至少有一个h2标签,其class是subtitle$this->assertGreaterThan(
    0,
    $crawler->filter('h2.subtitle')->count()); // Assert that there are exactly 4 h2 tags on the page// 断言页面有4个h2标签$this->assertCount(4, $crawler->filter('h2')); // Assert that the "Content-Type" header is "application/json"// 断言Content-Type头是application/json$this->assertTrue(
    $client->getResponse()->headers->contains(
        'Content-Type',
        'application/json'
    )); // Assert that the response content contains a string// 断言响应信息中包含一个字符串$this->assertContains('foo', $client->getResponse()->getContent());// ...or matches a regex$this->assertRegExp('/foo(bar)?/', $client->getResponse()->getContent()); // Assert that the response status code is 2xx// 断言响应状态码是2xx$this->assertTrue($client->getResponse()->isSuccessful());// Assert that the response status code is 404// 断言响应状态码是404$this->assertTrue($client->getResponse()->isNotFound());// Assert a specific 200 status code// 断言响应状态码是特殊的200$this->assertEquals(
    200, // or Symfony\Component\HttpFoundation\Response::HTTP_OK
    $client->getResponse()->getStatusCode()); // Assert that the response is a redirect to /demo/contact// 断言响应是一个指向/demo/contact的跳转$this->assertTrue(
    $client->getResponse()->isRedirect('/demo/contact'));// ...or simply check that the response is a redirect to any URL// 或者仅言响应是一个跳转,不管指向的URL是什么$this->assertTrue($client->getResponse()->isRedirect());
#
1
#

request() このメソッドは、HTTP リクエスト パラメータと URL パラメータを受け取り、Crawler インスタンスを返します。

機能テストの場合、リクエスト リンクをハードコーディングすることがベスト プラクティスです。テストで URL を生成するときに Symfony ルーティングを使用すると、URL ページへの変更を検出できなくなり、ユーザー エクスペリエンスが損なわれる可能性があります。

request() メソッドに関するその他の例は次のとおりです:

request() メソッドの完全な使用例:

$crawler = $client->request('GET', '/post/hello-world');

server 配列には、使用が想定される PHP スーパー グローバル変数 $_SERVER のネイティブ キー値が格納されます。たとえば、Content-TypeRefererXX-Requested-With (HTTP ヘッダー) を設定する場合、次のパラメータを渡す必要があります (注意してください)。これらは、ヘッダーの非標準の HTTP_ プレフィックスに使用されます):

request(
    $method,
    $uri,
    array $parameters = array(),
    array $files = array(),
    array $server = array(),
    $content = null,
    $changeHistory = true)

スクレイパーを使用して、応答コンテンツ内の DOM 要素を見つけます。これらの要素は、リンクのクリックやフォームの送信などの場合に使用できます。

$client->request(
    'GET',
    '/post/hello-world',
    array(),
    array(),
    array(
        'CONTENT_TYPE'          => 'application/json',
        'HTTP_REFERER'          => '/foo/bar',
        'HTTP_X-Requested-With' => 'XMLHttpRequest',
    ));

ここでの click() メソッドと submit() メソッドは、両方 crawler クローラー オブジェクトを返します。これらのメソッドは、フォームから HTTP リクエスト パターンを検出したり、ファイル アップロード用の優れた API を提供したりするなど、多くのことを実行してくれるため、アプリケーションのページを参照するのに最適な方法です。

Link オブジェクトと Form オブジェクトについては、次の Crawler セクションで詳しく説明します。

request メソッドを使用して、フォーム送信を直接シミュレートしたり、より複雑なリクエストを実行したりすることもできます。いくつかの有用な例:

$link = $crawler->selectLink('Go elsewhere...')->link();$crawler = $client->click($link); $form = $crawler->selectButton('validate')->form();$crawler = $client->submit($form, array('name' => 'Fabien'));

最後に注意していただきたいのですが、同じスクリプト内に複数のクライアントが存在する場合の副作用を避けるために、各リクエストをそれぞれの PHP プロセスで強制的に実行することができます。

#
1
// Directly submit a form (but using the Crawler is easier!)// 直接提交表单(但是使用Crawler更容易些)$client->request('POST', '/submit', array('name' => 'Fabien')); // Submit a raw JSON string in the request body// 在请求过程中提交一个JSON原生串$client->request(
    'POST',
    '/submit',
    array(),
    array(),
    array('CONTENT_TYPE' => 'application/json'),
    '{"name":"Fabien"}'); // Form submission with a file upload// 文件上传表单的提交use Symfony\Component\HttpFoundation\File\UploadedFile; $photo = new UploadedFile(
    '/path/to/photo.jpg',
    'photo.jpg',
    'image/jpeg',
    123);$client->request(
    'POST',
    '/submit',
    array('name' => 'Fabien'),
    array('photo' => $photo)); // Perform a DELETE request and pass HTTP headers// 执行一个DELETE请求并传递HTTP头$client->request(
    'DELETE',
    '/post/12',
    array(),
    array(),
    array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word'));
#

ブラウズ

クライアント オブジェクトは、実際のブラウザでの多くの操作をサポートします:

$client->insulate();

内部オブジェクトを使用する

#getInternalRequest() メソッドと getInternalResponse() メソッドは Symfony 2.3 から導入されました。 クライアントを使用してプログラムをテストする場合は、クライアント内でいくつかのオブジェクトを使用することもできます:

$client->back();$client->forward();$client->reload(); // Clears all cookies and the history// 清除所有cookie和历史记录$client->restart();

最新のリクエストに関連するオブジェクトを取得することもできます:

$history = $client->getHistory();$cookieJar = $client->getCookieJar();


リクエストが分離して実行されていない場合は、

Container (コンテナ) および Kernel (カーネル) を使用することもできます。

// the HttpKernel request instance// HttpKernel的请求实例$request = $client->getRequest(); // the BrowserKit request instance// 浏览器组件的请求实例$request = $client->getInternalRequest(); // the HttpKernel response instance// HttpKernel的响应实例$response = $client->getResponse(); // the BrowserKit response instance// 浏览器组件的响应实例$response = $client->getInternalResponse(); $crawler = $client->getCrawler();


コンテナの使用

機能テストでは応答のみをテストすることを強くお勧めします。ただし、まれに、内部オブジェクトを使用してアサーションを記述したい場合があります。この時点で、依存関係注入コンテナー (依存関係注入コンテナー、つまりサービス コンテナー) を呼び出すことができます:

$container = $client->getContainer();$kernel = $client->getKernel();
1
クライアントを分離して実行するか、HTTP レイヤーを使用する場合、上記の機能は動作しません。

debug:container コマンド ライン ツールを使用して、プログラムで利用可能なサービスのリストを表示できます。

Symfony2.6 より前では、このコマンドは

container:debug でした。

確認する必要がある情報がプロファイラーで利用可能な場合は、コンテナの代わりにプロファイラーを使用する必要があります。

分析データの使用

リクエストごとに、Symfony プロファイラーを使用して、リクエストが内部でどのように処理されるかに関する情報を収集できます。加工された。たとえば、アナライザーは、指定されたページの読み込みプロセス中のデータベース クエリの数が所定の値より少ないかどうかを検証するためによく使用されます。

最新のリクエストのプロファイラーを取得するには、例に従ってください:

$container = $client->getContainer();


テストでのプロファイラーの使用の詳細については、

使用方法を参照してください。機能テストでのアナライザーの使用 記事。

リダイレクト

リクエストがリダイレクト応答を返した場合、クライアントは自動的にフォローアップしません。応答メッセージを検出し、

followRedirect() メソッドを通じて強制的にフォローすることができます:

クライアントがすべてのリダイレクトを自動的に追跡する必要がある場合は、followRedirects() メソッドを使用して強制的に追跡できます。

// enable the profiler for the very next request// 为接下来的请求开启profiler$client->enableProfiler(); $crawler = $client->request('GET', '/profiler'); // get the profile 得到分析器$profile = $client->getProfile();
1
$crawler = $client->followRedirect();
1

will false followRedirects() メソッドに渡されると、リダイレクトは追跡されなくなります:

$client->followRedirects();
1

クローラ

クライアントを通じてリクエストを行うたびに、クローラ インスタンスが返されます。スクレイパーを使用すると、HTML ドキュメントを走査し、DOM ノードを取得し、リンクやフォームを見つけることができます。

トラバース

JQuery と同様に、クローラーには HTML/XML ドキュメントの DOM をトラバースするためのさまざまなメソッドがあります。たとえば、次のメソッドはすべての input[type=submit] 要素を検索し、ページ上の最後の要素を選択してから、その隣接する親要素を選択します。

$client->followRedirects(false);

他にも多くのメソッドがあります。次のものが使用できます。

  • filter('h1.title')
  • CSS ピッカーのすべてのノードと一致します。
  • filterXpath('h1')
  • XPath 式 (式) に一致するすべてのノード。
  • eq(1)
  • インデックスを指定するノード。
  • first()
  • 最初のノード。
  • last()
  • 最後のノード。
  • 兄弟()
  • 兄弟。
  • nextAll()
  • 後続のすべての兄弟。
  • previousAll()
  • 以前のすべての兄弟。
  • parents()
  • すべての親ノードを返します。
  • children()
  • すべての子ノードを返します。
  • reduce($lambda)
  • 匿名関数 $lambda が false を返さない場合のすべてのノード。

上記の各メソッドは Crawler グラバー オブジェクトを返すため、各メソッドの呼び出しを連鎖させることでノード選択プロセスのコードを削減できます。

$newCrawler = $crawler->filter('input[type=submit]')
    ->last()
    ->parents()
    ->first();

count() 関数を使用して、クローラに格納されているノードの数を取得できます: count($crawler)

情報の抽出

クローラはノードから情報を抽出できます:

$crawler
    ->filter('h1')
    ->reduce(function ($node, $i) {
        if (!$node->getAttribute('class')) {
            return false;
        }
    })
    ->first();

リンク

リンクを選択するには、上記の走査メソッドを使用するか、より便利な selectLink() ショートカット メソッドを使用できます:

// 返回第一个节点的属性值$crawler->attr('class'); // 返回第一个节点的节点文本$crawler->text(); // Extracts an array of attributes for all nodes// (_text returns the node value)// returns an array for each element in crawler,// each with the value and href// 提取一个由所有节点的属性组成的数组// (_text返回节点值)// 返回一个由抓取器中的每一个元素所组成的数组// 每个元素有value和href$info = $crawler->extract(array('_text', 'href')); // Executes a lambda for each node and return an array of results// 对每个节点执行一次lambda函数(即匿名函数),最后返回结果数组$data = $crawler->each(function ($node, $i) {
    return $node->attr('href');});
1

これにより、指定されたテキストを含むすべてのリンク、または alt 属性に指定されたテキストが含まれるクリック可能な画像が選択されます。他のフィルタリング メソッドと同様に、Crawler オブジェクトも返します。

リンク (リンク) を選択すると、特別なリンク オブジェクト (link オブジェクト) を使用できます。これは、リンクを処理するために特別に設計されたメソッドです (getMethod( と同様) ) または getUri() はすべてヘルパー メソッド/便利なメソッドです)。リンクをクリックするには、クライアントの click() メソッドを使用し、リンク オブジェクトを

$crawler->selectLink('Click here');

Form

Form に渡します。ボタンを介して選択できます。リンクと同様に、selectButton() メソッドを使用して選択できます。

##
$link = $crawler->selectLink('Click here')->link(); $client->click($link);
1
## ボタンではなくフォームのボタンを選択していることに注意してください。フォームには複数のボタンを含めることができるため、フォーム自体。トラバーサル API を使用する場合は、ボタンを見つける必要があることに注意してください。

selectButton()

メソッドは、button (ボタン) ラベルと submit (送信) が配置されているラベル (つまり ##) を選択できます。 #input ラベル)。ボタンのいくつかの部分を使用してそれらを検索します。

    value
  • value 属性 value

    id または alt画像の属性値
  • id
  • ##buttonボタン タグの id または name 属性値

    クローラーの後に、ボタンの場合は、
  • form()
  • メソッドを呼び出して、ボタン ノードを所有するフォーム インスタンスを取得します。

    $buttonCrawlerNode = $crawler->selectButton('submit');

#
1

#form() メソッドを呼び出すときに、フォーム フィールドの値を含む配列を渡してデフォルトを置き換えることもできます:
$form = $buttonCrawlerNode->form();
特定の HTTP フォーム送信メソッドをシミュレートする場合は、それを 2 番目のパラメータに渡します:
$form = $buttonCrawlerNode->form(array(
    'name'              => 'Fabien',
    'my_form[subject]'  => 'Symfony rocks!',));

1


#クライアントはフォーム インスタンスを送信する責任があります:

##

フィールドの値は submit() メソッドの 2 番目のパラメーターに渡すことができます。

$client->submit($form);

より複雑な状況では、フォーム インスタンスを配列として使用して、各フィールドに対応する値:

$client->submit($form, array(
    'name'              => 'Fabien',
    'my_form[subject]'  => 'Symfony rocks!',));

フィールドの種類に応じて値を管理できる非常に便利な API もあります:

// 改变某个字段的值/Change the value of a field$form['name'] = 'Fabien';$form['my_form[subject]'] = 'Symfony rocks!';

意図的に「無効な」選択/ラジオ値を選択する場合は、無効な選択値の選択を参照してください。

Form オブジェクトの getValues() メソッドを呼び出すことで、送信しようとしているフォーム フィールドの値を取得できます。 。アップロードされたファイルは、getFiles() メソッドによって返される切り離された配列から取得することもできます。 getPhpValues() メソッドと getPhpFiles() メソッドも、送信されたフィールドを PHP 形式で返すことができます (my_form[ subject]# のように、角括弧で囲まれたキーを受け取ります)。 ## – PHP 配列に変換されます)。

コレクションへのフォームの追加または削除

Collection of Forms (フォーム コレクション) を使用する場合、次のことはできません。 $form['task[tags][0][name]'] = 'foo フィールドを既存のフォームに追加します。これにより、Unreachable field "…" エラーが発生します。 $form は既存のフィールドを設定するためにのみ使用できるためです。新しいフィールドを追加するには、プリミティブ配列に値を追加する必要があります。

// 选取一个option单选或radio单选$form['country']->select('France'); // 选取一个checkbox$form['like_symfony']->tick(); // 上传一个文件$form['photo']->upload('/path/to/lucas.jpg');

ここで

task[tags][0][name] は JavaScript 名によって作成されたフィールドです。 。

タグなどの既存のフィールドを削除できます。

// Get the form. 取得表单$form = $crawler->filter('button')->form(); // Get the raw values. 取得原始数值$values = $form->getPhpValues(); // Add fields to the raw values. 给原始数组添加新字段$values['task']['tag'][0]['name'] = 'foo';$values['task']['tag'][1]['name'] = 'bar'; // Submit the form with the existing and new values.// 提交表单,包括既有值,以及新值$crawler = $this->client->request($form->getMethod(), $form->getUri(), $values,
    $form->getPhpFiles()); // The 2 tags have been added to the collection.// 2个新标签被添加到collection中$this->assertEquals(2, $crawler->filter('ul.tags > li')->count());

構成テスト


で使用されるクライアント機能テストでは、特別な

test テスト環境で実行するためのカーネルを作成します。 Symfony はテスト時に app/config/config_test.yml をロードするため、テストに使用される「プログラムレベル」の設定を調整できます。

たとえば、デフォルトの Swift Mailer は、テスト環境では電子メールを送信しないように設定されています。構成ファイル内の関連するオプションは次のように設定されます:

// Get the values of the form. 取得表单数据$values = $form->getPhpValues(); // Remove the first tag. 移除第一个标签unset($values['task']['tags'][0]); // Submit the data. 提交数据$crawler = $client->request($form->getMethod(), $form->getUri(),
    $values, $form->getPhpFiles()); // The tag has been removed. 标签已被移除$this->assertEquals(0, $crawler->filter('ul.tags > li')->count());
PHP:// app/config/config_test.php // ...$container->loadFromExtension('swiftmailer', array(
    'disable_delivery' => true,));

XML:<!-- app/config/config_test.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer"    xsi:schemaLocation="http://symfony.com/schema/dic/services        http://symfony.com/schema/dic/services/services-1.0.xsd        http://symfony.com/schema/dic/swiftmailer        http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd">     <!-- ... -->
    <swiftmailer:config disable-delivery="true" /></container>

完全に異なる環境を使用したり、関連するオプションを createClient() メソッドに渡すことでデフォルトのデバッグ モード ( true ) をオーバーライドしたりすることもできます:

YAML:# app/config/config_test.yml # ...swiftmailer:
    disable_delivery: true

プログラムの実行に HTTP ヘッダーが必要な場合は、createClient() メソッドの 2 番目のパラメーターに渡します。

$client = static::createClient(array(
    'environment' => 'my_test_env',
    'debug'       => false,));

各リクエストで渡すこともできます。基本的なプロセスは、 HTTP ヘッダー:

$client = static::createClient(array(), array(
    'HTTP_HOST'       => 'en.example.com',
    'HTTP_USER_AGENT' => 'MySuperBrowser/1.0',));

client は、test テスト環境 (または、# # であればどのような環境でも) のコンテナーで利用可能なサービスです。 #framework.test オプションが有効になっています)。これは、必要に応じていつでもクライアント サービス全体をオーバーライドできることを意味します。


PHPUnit 構成

各プログラムには独自の PHPUnit 構成があり、

app/phpunit.xml に存在します。 dist ファイル。このファイルを編集してデフォルト値を変更したり、ローカル マシンのみにテスト オプションを設定する app/phpunit.xml ファイルを作成したりできます。

app/phpunit.xml.dist ファイルをリポジトリに保存し、app/phpunit.xml ファイルを無視します。

デフォルトは標準ディレクトリ (src/

/Bundle/Tests、src//Bundle/Bundle/Tests、 src/ *Bundle/Tests) カスタム バンドル内のテストは、phpunit コマンドで実行できます。これは app/phpunit.xml.dist ファイルですでに構成されています:

$client->request('GET', '/', array(), array(), array(
    'HTTP_HOST'       => 'en.example.com',
    'HTTP_USER_AGENT' => 'MySuperBrowser/1.0',));

ただし、さらにディレクトリを簡単に追加できます。たとえば、次の構成ではカスタム ディレクトリ lib/tests にテストを追加します:


<!-- app/phpunit.xml.dist --><phpunit>
    <!-- ... -->
    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/Bundle/*Bundle/Tests</directory>
            <directory>../src/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
    <!-- ... --></phpunit>

コード カバレッジに他のディレクトリを含めるには、

コード セグメントも追加する必要があります:
rreeee

##
$form = $buttonCrawlerNode->form(array(), 'DELETE');
1