BehatとMinkを使用してSymfony2で機能テストをインストールおよび構成する

PHPで作成されたWebアプリケーションはテストが必要であるという考えは新しいものではなく、開発者の日常業務に徐々に取り入れられています。 PHPUnitは、新しいSymfony2フレームワークを含むPHPアプリケーションをテストするための標準になりました。 コントローラをテストするためのsymfony-standardからAcmeDemoBundleへのインストールでは、 1を使用します。 BehatとMinkを使用して機能をテストする別の方法について説明し、インストールとテストプロセスの詳細を説明します。



フレームワークのインストール



最初に、 ローカルホスト intlgitをサポートするApache + PHP 5.3の作業束が必要です。 それらのインストールと構成のプロセスについては詳しく説明しません-ネットワーク上に個々のシステムごとにこれを行う方法に関する十分な情報があり、さらに、開発者はすでにこれらすべてをインストールしています(開発はローカルまたはテストマシンで行われるべきだと私は個人的に考えています作業現場ではありません)

次に-GitHubでプロジェクトをダウンロードして構成する必要があります。 ターミナルを開き、ローカルサイトが存在するフォルダーに移動します。



$ cd ~/Sites

$ git clone github.com/symfony/symfony-standard.git

$ cd symfony-standard








Apache + PHPがSymfony2での作業に適しているかどうかを確認します。このため、フレームワークに付属のスクリプトを使用します。

$ php app/check.php





設定またはモジュールが必要な場合-インストールして構成します。



フレームワーク自体をダウンロードします(デフォルトでは、 vendorsフォルダーにあります)。 これを行うには、ターミナルに入力します。

$ php bin/vendors install





その後、2つのファイルに変更を加えるために、ブラウザーでプロジェクトの表示を構成する必要があります(パスが異なる場合がありますが、Mac Os 10.6では標準で提供されているApacheを使用しています)

- / etc / hostsに 、プロジェクトがローカルであることを示す行追加します。ネットワーク上で検索するものはありません。

...

127.0.0.1 symfony-standard






-/etc/apache2/extra/httpd-vhosts.conf



 <VirtualHost *:80> DocumentRoot "/Users/Standart-User/Sites/symfony-standard/web" ServerName t0002.loc <Directory "/Users/Standart-User/Sites/symfony-standard/web"> Options Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews AllowOverride All </Directory> </VirtualHost>
      
      





Apacheを再起動し、 symfony-standard / app_dev.phpページを開いてブラウザーで作業の結果を確認します 。 すべてが正しく行われると、次の図が表示されます。

symfony標準のスタートページ



そして、プロジェクトのルートフォルダにターミナルを入力すると

$ php app/console





フレームワークコマンドのリストを取得します。 利用可能なコマンドブロックにオプションをリストした後、 behatコマンドはまだこのリストにないことに注意してください



この段階では、Symfony2をインストールできたと想定できます。



テスト用にMinkとBehatをインストールする



私が取り組んでいるすべてのプロジェクトは〜/ Sitesフォルダーにあり、Symfony2フレームワークのインストールごとにテスト用のバンドルをインストールしたくないので、これを〜/ Sites / testsuite.behatフォルダーで一度実行してから接続しますその内容をあなたのプロジェクトに。



インストールを簡単にするために、GitHubにプロジェクトを作成しました。そこからインストールできます。



 $ cd ~/Sites $ git clone https://github.com/livsi/testsuite.behat.git $ cd testsuite.behat
      
      







実際、サブモジュールのセットと、これをすべてSymfony2の作業プロジェクトに結び付ける方法に関する指示が含まれています。 リポジトリを複製した後、サブモジュールをダウンロードする必要があります。 これを行うには、次のコマンドを実行します。

 $ git submodule update --init
      
      







テストキットのインストールに関するすべてはほぼ完了です。 BehatとMinkアクティブなブランチはマスターではなく開発ブランチであるため、手動で切り替える必要があります。

 $ cd ~/Sites/testsuite.behat/vendor/Behat/Behat/ $ git checkout --track -b develop origin/develop $ cd ~/Sites/testsuite.behat/vendor/Behat/Mink/ $ git checkout --track -b develop origin/develop
      
      







testsuite.behatsymfony-standartプロジェクトに接続します



ネットワークから何も取得する必要はなく、 symfony-standartプロジェクトで設定ファイルを編集するだけなので、これは最速のステップです。 README.mdファイルにある、以前にダウンロードしたコードに手順が添付されています



ファイル〜/ Sites / symfony-standart / app / autoload.php開き 、次の行を追加して(独自にパスを修正する必要があります)、テストバンドルをsymfony2プロジェクトにロードします。

 // app/autoload.php $loader->registerNamespaces(array( // ... 'Behat\BehatBundle' => '/Users/Standart-User/Sites/testsuite.behat/vendor', 'Behat\Behat' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Behat/Behat/src', 'Behat\Gherkin' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Behat/Gherkin/src', 'Behat\Mink' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Behat/Mink/src', 'Behat\MinkBundle' => '/Users/Standart-User/Sites/testsuite.behat/vendor', 'Goutte' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Goutte/src', 'Zend' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Zend/library', 'Behat\SahiClient' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Behat/SahiClient/src', 'Buzz' => '/Users/Standart-User/Sites/testsuite.behat/vendor/Buzz/lib', // ...
      
      





ファイル〜/ Sites / symfony-standart / app / AppKernel.phpにはBehatBundleBehatMinkBundleの 2つの主要なバンドルが含まれています。

 // app/AppKernel.php if (in_array($this->getEnvironment(), array('dev', 'test'))) { // ... $bundles[] = new Behat\BehatBundle\BehatBundle(); $bundles[] = new Behat\MinkBundle\BehatMinkBundle(); // ... }
      
      





〜/ Sites / symfony-standart / app / config / config_dev.ymlに必要なパラメーターを書きます:

 # app/config/config_dev.yml framework: test: ~ # ... behat: ~ behat_mink: base_url: http://symfony-standart/app_test.php/ goutte: ~ # enable both Goutte sahi: ~ # and Sahi session
      
      





ターミナルのsymfony-standartプロジェクトのルートから、すべてが正しくインストールおよび設定されていることを確認します:

$ php app/console





フレームワークのコマンドのリストを取得します。behatコマンドが存在するはずです。 これは、すべてが機能し、必要なバンドルが接続されていることを意味します。



テスト自体





バンドルのテストフレームワークを作成するには、プロジェクトルートからコンソールでコマンドを実行します。

$ php app/console behat:bundle --init Acme\\DemoBundle





彼女はsrc / Acme / DemoBundleフォルダーにFeatures /ディレクトリを作成します



これにファイルを追加します。これは、 feature1.featureと呼び、次のコンテンツが含まれます。



 # language: ru :    AcmeDemoBundle       :     dev           "/app_dev.php"       200     "Congratulations! You have successfully installed a new Symfony application."     "Welcome!" :         "Run The Demo"     "/app_dev.php"      "Run The Demo"     "/app_dev.php/demo/"       200     "Available demos"
      
      







これらはまったく同じ機能テストです。 テストを開始するには、コンソールで次のコマンドを入力します。

$ php app/console behat --no-paths @AcmeDemoBundle



そして、次のようなものが表示されます:

AcmeDemoBundle symfony-standardテスト結果



スクリーンショットから、呼び出し構文が簡素化されていることがわかります。最初はbehat:test:bundleからbehat:bundleへ 、そして今はbehatへ



次のように入力すると、コンソールコマンドに必要なキーに関するヘルプを取得できます。

app/console help behat







BehatとMinkを接続するのに比較的時間をかけなかったため、わかりやすい言語で書かれたシンプルで読みやすく直感的なテストという形で大きな利益を得ることができました。 それらは迅速に記述され、迅速に実行されます。



謝辞



BehatMinkの使用を助言してくれたKonstantin Kudryashov(everzet habrayuzer )、 KnpLabsが作者への支援と支援を行い、プロジェクトをサポートし、さらに改善してくれたことに感謝します。

また、Symfony2の強力で便利なフレームワークの開発者、および迅速に習得するのに役立つ最も詳細なドキュメントにも感謝します。



使用済みの素材とリポジトリ:










PHPUnitを使用してコントローラーをテストする例(symfony2でデフォルトで使用):



 namespace Acme\DemoBundle\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class DemoControllerTest extends WebTestCase { public function testIndex() { $client = $this->createClient(); $crawler = $client->request('GET', '/demo/hello/Fabien'); $this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0); } }
      
      







Behatでも同じ

: , PHPUnit

"/app_dev.php/demo/hello/Fabien"

"Hello Fabien"









そうではありません-Behatテストはより視覚的ですか?



All Articles