PHP と JS を使用して Web アプリケーションを作成しましたが、これは現在動作しています。コードをクリーンアップしながら、単体テストについて学び、今すぐ実装する必要があると判断しました。
何を単体テストすべきか混乱しています。私が見たすべての PHPUnit チュートリアルでは、getter、setter、配列内のアイテムのカウントをテストしています。私が取り組んでいるサイトには、写真を表示するページがあります。ユーザーは写真を気に入ったり、お気に入りに追加したりできます。PHP は主に、backbone.js を実行するクライアント側への API レイヤーとしてサイトで使用されます。
これらの関数の単体テストはどのように作成すればよいですか? 関数 (以下に示す) は、AJAX 経由で送信された $_GET データを取得し、いくつかの行をデータベースに挿入します。セッター、ゲッター、またはカウントを含まず、クラスではありません。単体テストも必要ですか?
これらの関数のために私が書くことができる単体テストの例は、本当に素晴らしいものになるでしょう! :)
/**
* Create new Set and add item to it
* @return void
*/
public function action_create_set() {
// Get data from user
$user_id = Input::get('user_id');
$post_id = Input::get('post_id');
$set_name = Input::get('set_name');
// Create new set
$data = array(
'user_id' => $user_id,
'name' => $set_name
);
$set_id = DB::table('sets')->insert_get_id($data);
// Add item to newly created set
DB::query("INSERT IGNORE INTO posts_sets (post_id, set_id, user_id)
VALUES ($post_id, $set_id, $user_id)");
// Change `created_at` & `updated_at` col of 'sets'
$data = array(
'created_at' => DB::raw('NOW()'),
'updated_at' => DB::raw('NOW()')
);
DB::table('sets')
->where('id', '=', $set_id)
->update($data);
}
この最初の関数について、これら 3 つの変数$user_id, $post_id, $set_name
にデータが含まれている必要があることを確認するテストを作成できるというのが私の印象です。2 つのクエリが機能することを確認するテストが必要だinsert
と思いますが、行を挿入する関数は PHP フレームワークによって提供され、すでに十分にテストされているため、それ以上の単体テストは必要ないと思います。
別の推測では、テストは関数に 3 つの変数を提供し、新しい行が 2 つのテーブルに挿入されているかどうかを確認する必要がありますが、これは統合テストと見なされませんか?
これは、AJAX を介してユーザーから入力を取得し、結果を JSON 形式で返す関数です。PHPUnit はこの種の API 関数を処理する必要がありますか? または、単体テストをクライアント側で行う必要がありますか?
/**
* Get items Liked by user
* @return array
*/
public function action_likes() {
$user_id = Input::get('user_id');
$likes = DB::table('likes')
->join('posts', 'posts.id', '=', 'likes.post_id')
->where('likes.user_id', '=', $user_id)
->get();
return json_encode($likes);
}