テストの書き方
- テストファーストにこだわらなくても良い
- けど新しいプロジェクトならテストファーストでもいい
- とくにAPIの開発にはテスト書いたほうが楽
掲示板を見る機能
- get でデータを取得する
- データは json で返って来て欲しい。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class IndexTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testGet()
{
$response = $this->call('GET', '/');
$this->assertEquals(['title' => 'test', 'body' => 'hello'], $response->getContent());
}
}
と、書いて実行。
当然のエラー。なぜなら何も実装してないから。そこで、このテストが通るように実装する。まずはコントローラーと呼ばれる部分に GET method を実装する。
Laravel ではルーティングは app/Http/routes.php に定義するらしい。
Route::get('/', 'BoardController@index');
routing に関して、resource という一気に実装する関数があるようだ。特にアクションとメソッドのひも付けはドキュメントを参考にすること。ちなみに自分はどうしてもなじめないので一つずつ実装する。
そして対応するコントローラーをここを参考に作成する。
php artisan make:controller BoardController
app/Http/Controllers 以下に作成されたコントローラーに処理を実装していく。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class BoardController extends Controller
{
function index() {
}
}
ここで対象のテーブルを作る。
php artisan make:migration create_boards_table
database/migrations/ 以下に新しく 20016_hogehoge.php みたいなファイルができているはず。この中にスキーマを定義する。細かいことはここを参照。
定義したら
php artisan migrate
composer dump-autoload
すること。とくに autoload に登録しないとクラスノットとか言われてストレスマッハになるので注意。
ついでにデータも作っておく database/seeds 以下に作るがこれだけ生成コマンドがないので DatabaseSeeder.php をコピペして適当に作る。Model を読むのを忘れないように。
<?php
use Illuminate\Database\Seeder;
use App\Models\Board;
class BoardTableSeeder extends Seeder
{
public function run()
{
DB::table('boards')->truncate();
DB::table('boards')->insert([
[
'title' => 'test',
'body' => 'hello',
'created_at' => '2001-11-30 00:00:00',
'updated_at' => '2001-11-30 00:00:00',
],
]);
}
}
さらに DatabaseSeeder.php に一行追加する。
$this->call(BoardTableSeeder::class);
ここまでの準備で、テーブル作成からデータ投入までがコマンドでいつでもできるようになる。他のメンバーのことを考えてかならずこの手順を踏むこと。
で、実行。
composer dump-autoload
php artisan migrate:refresh --seed
次からは実際にコントローラーを実装する。