2020.2.25
研修
みなさん、こんにちは。マイスターギルドです。
タイトルを見て、「そんなことも分からんのか」と思う方もいらっしゃると思います。
そうなんです、私はできなかったんです。
今回は、Laravelプロジェクトでシステム開発をしているときの
私の失敗と解決できた方法をまとめていきます。
誰しも失敗はありますよね?
正しく動作するかをテストすることはとても重要です。
私もシステムが正しく動作するか、テストを書いており
検索機能が正しく動作しているか HTTP テストを書いていた時の話です。
テストの作成 |
よし、テストを作成するぞ!と意気込んで作成を開始しました。
まず、プロジェクトフォルダで、ターミナルを開きます。
$ cd test // 現在の階層のtest(フォルダ)に移動する
そして、ItemSearchTest
を作成します。
$ php artisan make:test ItemSearchTest
これでtest\Feature\ItemSearchTest.php
が生成されます。
さぁテストを書いていきましょう。
query が渡せない |
文字列検索は、get
メソッドで自己参照させてquery
で条件を与えていました。
そのため、以下のようなコードを書きました。
test\Feature\ItemSearchTest.php
public function testGeneralPattern () {
$query = [
"keyword" => "〇〇",
];
$response = $this->get(route("item"),[
"query" => $query,
]);
}
実行してみると、NG のパターンが通らない。
中身を調べてみると、
query
はまったく送られていませんでした。
ネットで調べた通りにHeader
の中に入れたのになぁ、と途方に暮れることになりました。
URL でもダメ |
他に方法はないかと考えた結果、URL にquery
情報を入れ込む方法を試してみました。
test\Feature\ItemSearchTest.php
public function testGeneralPattern () {
$url = "http://localhost/item?keyword=〇〇";
$response = $this->get($url);
}
これでもダメでした。
この時点で少し心は折れかけていました。
方法なんてないんじゃ・・・。
route() |
長時間悩まされていましたが、解決のときが来ました。
「route()
の第二引数でquery
が渡せる」 という情報を手に入れたのです。
早速、試してみました。
test\Feature\ItemSearchTest.php
public function testGeneralPattern () {
$query = [
"keyword" => "〇〇",
];
$response = $this->get(route("item", $query);
}
頼む!通ってくれ!!と願いを込めて・・・・、
ちゃんとquery
が渡せていました!
今月で一番ホッとした瞬間でした。
query
を引き継ぐ検索機能だけでなく、ソート機能やタブ切替など
機能が増えてくると、現在のquery
を保持して自己参照したいと考えました。
上記でもあるように、route()
を使えばquery
を渡せることは分かっています。
あとは現在のquery
を取得する方法だけです。
Request::query() |
現在のquery
を配列で取得するものです。
これが手に入ればあとはもう簡単でした。
resources\views\item\index.blade.php
<a href="{{ route('item', array_merge(Request::query(), ['tab' => '〇〇'])) }}">〇〇</a>
これで現在のquery
に与えたいquery
を追加した URLとなります。
今回で少しずつですが、調べる能力が身についてきたと実感しました。
まだまだ自信を持てるほど、知識も経験もありませんが、
こうやって一歩ずつ歩みを進めていれば、いつかは・・・という気持ちがあります。
自分の理想に少しでも近付けるように引き続き頑張っていこうと思います。
最後まで読んでいただき、ありがとうございました。