質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

818閲覧

PHPUnit HTTPテスト時のデータINSERTがうまくいかない

masa80

総合スコア8

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2018/06/20 07:41

編集2018/06/20 08:09

前提・実現したいこと

laravelで非同期通信を主にしたWebアプリを作成しています。

PHPUnitでコントローラクラスのテスト作成で少々嵌っております。

GuzzleClientというHTTPライブラリを使用してURLを呼び出しています。

テストメソッドでは大まかに以下のような処理をしています。

public function testテストメソッド(){ ・・・  テストで必要なデータをテーブルへINSERT    GuzzleClientでURL呼び出し ← コントローラのメソッド実行される  response受け取り  受け取った返却値のアサーション  ・・・ }

上記で、
テストで必要なデータをテーブルへINSERT
したはずが、コントローラのメソッド実行時には該当データが
テーブルに入っていません。

発生している問題・エラーメッセージ

具体的なコードで書くと以下です。

public function testテストメソッド(){    モデル::insert(['カラム1' => '値1', 'カラム2' => '値2', 'カラム3' => '値3']);  $clientGuzzle = new GuzzleClient();  $response = $clientGuzzle->get('/呼び出すURL', [   'query' => [   'param1' => 'パラメータ1',  'param2' => 'パラメータ2',  ],  'headers' => [  'X-Requested-With' => 'XMLHttpRequest',    ]  ]);  responseデータのアサーション }

呼び出すURLのコントローラメソッド内で、
事前にINSERTしたモデルのデータを使いたいのですが、
INSERTされていないため、データが使えずエラーが発生します。

setUp()にデータINSERT処理を書いてみたりもしましたが、
だめでした。

どのように書くのが正しいのでしょうか。

言語/フレームワーク
PHP/laravel5.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

>HTTPリクエストにGuzzle使う必要はない。
>Guzzle使ってるせいで別の所にリクエスト送ってるだけでは…

こちら、おっしゃる通り以下のようにGuzzleを使わない方法

$this->json('POST', 呼び出すURL, [ 'column1' => 'hogehoge', 'column2' => 'fugafuga', ], $this->headers);

にしたらうまくいきました。

投稿2018/10/01 06:48

masa80

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

5.5だとRefreshDatabaseでテスト毎にDBのリセットとマイグレーションまでは終わってる。
https://readouble.com/laravel/5.5/ja/database-testing.html

DBへの追加はfactoryを使う。
一応直接insertでもいいはずだけど。
まずこの段階でテスト用のDBに正しく追加されてるか確認。

$this->assertDatabaseHas();

次、HTTPリクエストにGuzzle使う必要はない。
https://readouble.com/laravel/5.5/ja/http-tests.html

$response = $this->get('/');

Guzzle使ってるせいで別の所にリクエスト送ってるだけでは…。

これができないんだから使い方が違う。

$response->assertStatus(200);

投稿2018/06/20 08:58

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masa80

2018/08/13 03:32

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問