2015.11.10
0からはじめるPHP#54【TDDで作り直す掲示板#2-テストの実装-】
では実際にテストを記述したいところですが、まずはテストの動かし方を知らなければなりません。
ということで、TDDに先立ち、まずは今あるプログラムをテストで動かしてみることからはじめましょう。
といっても使い方は簡単です。
マニュアルを見れば大体わかります。
ってことで、テストしてみましょう。
実行はコマンドプロンプトから行います。
これだけでtestフォルダ内のテストファイルが実行されるみたいです。簡単ですね。
class ExampleTest extends TestCase
{
public function testBasicExample(){
$this->visit('/')
->see('-');
}
}
とりあえずこんなテストを書いてみました。
ルートにアクセスして、「-」があればTRUEが返されるはずです。
で、
実行するとエラーが出ます。
文字化けしてますが、解読すると「蜷榊燕」は
「名前」の意です。SJISをUTF-8で変換するとそうなります。
なんなんですかね。日本語の変数名を使うとおかしくなるとしか考えられませんね。
しかし日本語の変数名を使わないとバリデーションの設定がすごいしんどくなるというか、フレームワークを使う意味がなくなる・・・・・・
が、こんなところで躓いてても仕方がないので、とりあえず
「日本語がキーになっている配列変数」を削除してみます。
動きました。お疲れ様。
public function testBasicExample(){
$this->visit('/')
->see(mb_convert_encoding('返信',"SJIS","UTF-8"));
}
ちなみに
日本語を取り扱う場合はShift-JISに変換しないとバグるらしい。
phpUnitがSJISで動いてるんですかね。うーん?phpはUTF-8が標準だと思っていたんだがなぁ・・・・・・。
・・・・・・もう一つの可能性は
コマンドプロンプト自体が悪さをしているという予想です。
引用元:コマンドプロンプトの文字コードを変える方法(Pentan.info)
めんどくさいので画像で引用させてもらいますが、コマンドプロンプト自体をUTF-8に変更することで関数噛まさなくても動くようになりました。
僕の1日返して欲しいですね。
ただ、これでseeの場合動くのですが
Clickは動かないという致命的な欠陥を抱えています。
これはつまり
日本語のリンクが踏めないって言ってるようなものなのでどうしたものでしょうか。
具体的にはこんなエラーが出ます。
a??a??a??ってなんですかねこれ。
もはや意味わからないので、yahoo知恵袋にも一応質問してみたんですがアンサーが帰ってきません。
仕方ないので諦めます。
日本語でのリンクのクリックはできないものとして扱いましょう。(何)
最悪アルファベットで書いて、最後の段階で書き換えれば良いだけの話ですからね・・・・・・。
っていうことで、現段階での進捗状況です。
public function testDBaccess()
{
$this->visit('/')
->see('/')
->see('-');
}
/*返信の表示*/
public function testReply()
{
$this->visit('/')
->see('返信')
->see('引用返信');
}
・記事の表示
・データベース読み込み
・読み込み成功
・読み込み失敗(エラー処理)
・親スレッドの表示
・返信の表示
・記事情報の表示
・返信ボタンの表示
・引用機能
・フォームの表示
・フォーム部品の表示
・バリデーション(javascript)
・投稿ボタンの表示
・プレビュー機能
・プレビュー表示
・リセットボタン
・フォーム全消去(javascript)
・投稿
・データベース送信
・エラー処理
・エラー処理
・バリデーション
・ページネーション
・ナビバー表示
|
消えている項目がとても多いですね!!!
テストの書き方が分かんないけど実装ができたものです。
こういうのってどうテストしたら良いんだろう・・・・・・。ううーん。
ちなみに、作りなおしている掲示板の見た目はこんなんです。
一応、親スレと、それについてる返信を表示する機能までは実装しました。
ただまぁ、アレですね。
確かに
ダミーデータから作った方が圧倒的に作りやすいのは感じます。
ダミーデータ流した時に上手く行ったから、今度はそのデータをデータベースから取ってこよう!こんな形のデータが欲しいから、こういう風にデータを取ってこよう!って逆算的に考えるのがかなり容易になるので、取っ付き易いですね。
ってことで、作り進めていきたいなーと思います。