overこの広告は、90日以上更新していないブログに表示しています。PHPバージョン2で入った新機能などを紹介するエントリなど書く書く詐欺をしていたら年末になってしまいました。いうか2014年、2つめのエントリ。Codeceptionを中心にお仕事をしておりました。社内におけるCodeceptionの実績も溜まってきましたので、その経験をもとにした、マニュアルには載っていないちょっとしたコツやTIPSを紹介したい思います。Actorにはテンションの上がる名前をつけよう「マニュアルには載っていない」と前置きしながらいきなりマニュアルに載っていることを。バージョン1では「Guy」固定だったActor名、バージョン2からは自由に名前を決めることができます!(「FunctionalGuy」、「AcceptanceGuy」の「Guy」部分です。)正直バージョン2の新機能で最も素晴らしいのはココじゃないか!?実際のActor名の指定はbootstrapのオプションとして指定します。好きなアノ子の名前でも、ペットの名前でも、親しみの湧く名前を付けましょう。胸が熱くなること間違いなしです。楽しくテストしましょう。$I->seeElement(...)など、様々な箇所に登場してくるCSSセレクタ。あれ、テストコードの可読性を下げるやっかいなヤツです。性格にも依るんじゃないかと思いますが、時にはこんなことに。td:nth-child(2)');まぁ、PageObject使えよ!ということかもしれませんが、その前にテンプレートのid属性やclass属性をテストを意識したものに整理しておくことをおすすめします。テンプレート外注した場合など、idを下手にいじるとデザインに影響が及んだり、もあるわけで。そんなときはテスト専用のクラスをつけてしまえば良いと開発者の@davertさんはアドバイスしています。seeInField利用できるように、for属性、id属性の対応を適切にしておく一覧系であれば主キーにもとづいたid属性やクラスをtrに付与しておくなどを実践するようにしています。Testは基本的にCeptフォーマットで記述しています。開発者によって、wantTowantToTestexpectexpectTocommentに対する理解の違い、使いどころの違いのため、テストコードの統一性が損なわれるという経験をしました。そこで、現在では以下のようなテンプレートを導入しています。FunctionalGirl($scenario);$I->wantToTest('テストしたい機能名');$I->comment('どのようなテストを行うのかの説明、前提事項など');$I->amGoingTo('操作内容');$I->comment('特記事項');$I->amOnPage(...);$I->fillField(...);$I->click(...);$I->expect('操作の結果、期待すること1');$I->comment('特記事項');$I->see(...);$I->seeInField(...)$I->expect('操作の結果、期待すること1');$I->comment('特記事項');$I->see(...);$I->seeInField(...)このように、1つのamGoingToに対して複数のexpectを記述する形式にすると頭の中身をそのまま記述していけると考えています。いまのところ、これが「さいきょう」だと思ってますが、、、、異論は認める。入力画面');$I->comment('このテストではユーザー登録用のフォームが正常に動作することを確認します。'#password');最終手段!モジュールを拡張する方法CodeceptionはActorへの機能追加を実現するためのHelperという仕組みを提供しています。Documentationしかしながら、要件によってはモジュール+ヘルパーではテストができないケースがあるかもしれません。そんなときには最終手段としてモジュール自体を拡張するという方法が残っています。Laravel4モジュールを例に、拡張の手順を説明します。(パス等はプロジェクトに合わせて読み替えてください。trueこの、Laravel4をLaravel4Extに変更します。trueこれで準備は完了です。あとはLaravel4Extクラスで既存のメソッドをオーバーライドして好きなようにできます。他をすべて考え尽くしたあとの最終手段として採用すべき、だと個人的には考えています。将来的にフレームワーク側のバージョンアップに追随できなくなる可能性がある、というのが一番の理由です。実際に拡張をした例Laravel4モジュールの場合、DBに対する変更を確認するためのAPIとして、seeRecorddontSeeRecordがあります。とあるアプリケーションにて、アプリケーションが使用するユーザーとは別のユーザーが所有するテーブルにデータを永続化する、という機能がありました。セキュリティポリシーによりアプリケーションデフォルトのユーザーは永続先テーブルに対する権限は何もありません。そんな機能をテストするためには、テスト中にデータベースのコネクションを切り替えられるようにしなければなりません。dontSeeRecordにコネクション名を指定できるようにするという2つの選択肢を考えました。前者ではコネクションを戻すのを忘れた場合に後続のテストに影響がある(=うっかりミスで開発効率を下げる可能性がある)ため、後者を採用し、以下のようにしました。\DB::setDefaultConnection(self::DEFAULT_CONNECTION);}?>1年半前から使いはじめたCodeception、当時のバージョンは1.6.3.1。現在のバージョンは2.0.9。日本のPHPerに広めたいですね。来年こそはphpconに。17:03マニュアルには載っていないCodeceptionのコツ/TIPSTweet広告を非表示にする関連記事2014-04-02Codeceptionにバグ修正をプルリました。Codeception、メジャーバージョンアップが...2013-11-21PhalconアプリケーションをCodeceptionでテストしてみた先日、Codeceptionが1.8にバージョンアップされました。2.0/課題に挑戦してみたしばらくはCodeceptionネタが続きます。Functionalテスト前回はFizzBuzzのUnitテストを書きました。Codeceptionにバグ修正をプルリました。最新記事Codeceptionのドキュメントの翻訳をはじめました。(2)はてなブログをはじめよう!piccaglianiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。