LoginSignup
1
3

More than 5 years have passed since last update.

LaravelのPHPUnitで外部サイトにリクエストを投げる

Last updated at Posted at 2018-05-09

前に調べた、これや、これのおさらい。ただ、BrowserのテストはDuskで行えるようになってます

結局、普通?の$this->get()は外に出られないのかな???

 Guzzleのインストール

Laravelのディレクトリで、下記を実行。

composer require guzzlehttp/guzzle

実装

とりあえず、test/Feature/ExampleTest.phpを下記のように書き換えます。

test/Unitでもまあ、動きますが。

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use GuzzleHttp\Client; //use

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest1()
    {
        //client
        $client = new Client;

        //request先
        $url = "http://www.bluecode.jp/test/api.php";

        //request
        $res = $client->get($url);

        //jsonからオブジェクトへ
        $obj = json_decode($res->getBody());

        //評価
        $this->assertEquals(200,$res->getStatusCode());
        $this->assertEquals("OK",$obj->status);
        $this->assertRegExp('/^Hello$/',$obj->message);
    }
}

テストの実行

普通にテストを実行します。

vendor/bin/phpunit

Basic認証への対応

テスト環境ではBasic認証がかかってることも多いかと思いますが、その場合は下記のように記述します。

なお、Guzzle5.0以降とそれ以前では書き方が違うようなので注意が必要です。

    public function testBasicTest2()
    {
        //client
        $client = new Client;

        //request先(Basic認証がかかっている想定)
        $url = "http://www.bluecode.jp/test/api.php";

        //request( with basic auth)
        $res = $client->get($url,[
            'auth' => [
                'username',
                'password'
            ]
        ]);

        //評価
        $this->assertEquals(200,$res->getStatusCode());
    }

assertのパターン

過去記事の再記載ですが、とりあえず、

  • ssertEquals($expect,$var) expectとexpectとvarが等しいか?
  • assertRegExp($ptn, $var) 正規表現にマッチするかどうか?
  • assertNull($var)
  • assertTrue($var)
  • assertFalse($var)
  • assertCount($num,$array)
  • assertEmpty($array)

あたりを押さえておけばいいかなと。
その他はphpunit assertでググればいくらでも出てきます。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3