symfony勉強会 #9 sopraを支えるテストコード
TRANSCRIPT
はじめに•弊社自社サービス sopra を開発したときの話が中心です。http://sopra.jp/
•テストコードの話をしますが、いわゆるHow To 的な話ではなくて、実際のプロダクトでどういった部分にテストを書くと効果的なのか、といった話をします。
自己紹介•@imunew• 2013年5月からヒトメディアにて副CTO•ヒトメディア以前は、MJS→JIC→FSI→gloopsと転々と
•ヒトメディアでは、コードも書きますが、見積書や請求書も書きますし、経営資料も作ります。エンジニアの面談もやります。
Symfony勉強会 #8•ヒトメディアに入社したばかりの頃。社内のプロダクトはSymfony1.4で作られたものがほとんど。2系に移行したいと思っていたのでエンジニアを2名連れて参加してみた。
•この勉強会をきっかけに、Symfony2.3、Silexを使ってプロダクトを複数開発しています。
2013年7月• Silexで Console Application + Web な管理サイト作った後に、自社サービスとして社会人向け映像学習サービス「sopra」を開発することに。
• 2013年1月から企画はあったが、メインの受託開発でそれどころではなく、Wordpress + Membership プラグインで作るみたいな構想だった。
Wordpress...•Wordpressレガシーすぎる
http://mask-legacy.tumblr.com/post/62315583278/in-wordpress-phpcon2013-wctokyo
(レガシーコード in WordPress)
•基本ブログ以外の用途には使えないと思ったほうがいい
•Wordpress案を捨てて、Symfony2で作る判断をしたときに既に7月下旬、9月中旬リリースだから実質1ヶ月ちょっとしかない
とにかく作ろう•エンジニア3人で開発•この段階ではテストコード無し• Symfony2学習コストそれなりに高い•ページによって非ログイン状態でもページ見せたいだけなのにanonymous: ~ にたどり着くまで2日はかかた気が
正式リリースに向けて•プレオープン時は全コンテンツ無料だが、正式リリースでは月額課金にして有料コンテンツを配信
•課金周りの実装を担当•会員登録した月のみ初月無料特典がある。•その他、授業や動画をクリップできたり、コメントやレーティングできたりとプレオープンに間に合わなかった機能を実装
そうだテスト書こう• phpunitのインストール•はじめはControllerのテストから•ログインしたことにしてページ遷移してformに値セットしてsubmitしてcrawlerで画面表示項目をチェック状態が期待通り遷移しているかチェック
モックも使ってみよう•決済処理には多くのエラーケースが存在する•カードの有効期限切れなどは、故意に発生させにくい
•モックオブジェクトに任意のエラーを返してもらおう
•決済会社が用意してくれているテスト環境では出せないエラーでも自由自在だし、そこはテストの範囲ではない
テストでハマったところ•ページ遷移したときに、entityManager使いまわしていると、例外発生したので、ページ遷移後にインスタンスを再生成することに
• FixtureBundleでデータを投入する前に、truncate tableしたいのに、関数が用意されていないので、実装
•技術的な部分はblogにまとめてあります。http://imunew.github.io/blog/
そして2014年• 3月、大人の事情により、課金バッチ停止5月中旬まで全ての動画を無料で公開してます。
• 5月末にアップデートを行い、授業個別での課金に変更する予定です。
•新たな決済処理でも懲りずにテストコード書きます。