#開発環境
ツール | バージョン |
---|---|
PHP | 7.3.18 |
Laravel | 7.12.0 |
#困っていること
自分は現在このような機能を作成しています。
- 文字列の入力値を引数にとる。
- 入力値からDBのあるテーブル内のレコードを全て取り出す。
- 取り出したデータをjson形式にして返す。
この機能のテストを行うためにこのようなテストを行いました。(ちなみにテスト対象のファイルは~/app/Model/User/SignIn.php
というファイルで、テスト行うファイルは~/tests/Unit/OAuth/ModelTest.php
というファイルです。)
- あらかじめDBの該当のテーブルへデータを入れておく。
- 該当のテーブル内のデータを全て取り出し、
json_encode()
でjson形式にし、変数へ代入する。 - テスト対象の関数へあらかじめDBへ入れたデータの一部を受け渡し、結果を変数へ代入する。
- 2、3で得られた変数を比べ、両方とも値が同じになるか確かめる。
そしてテストの確認を行うと、テスト対象の結果は成功にもかかわらずテスト内で行われたjson_encode()
の結果が通常と異なるため、テストが正常に行われませんでした。
どうしたらテスト環境でもjson_encode()
が正常に作動するのでしょうか?
#エラー内容
テーブルのカラムがgmail
なのにそこに入る値がgmail.com
ではないじゃないか、と思われるかもしれませんが今回の機能ではgmail.com
以外のメールアドレスでも正常に動くようになっていますので、気にしないでください。
terminal
1 RUNS Tests\Unit\OAuth\ModelTest 2 • sign in test 3 4 Tests: 1 pending 5sh: 1: gmail: not found 6 7 FAIL Tests\Unit\OAuth\ModelTest 8 ✕ sign in test 9 10 Tests: 1 failed 11 12 Failed asserting that two strings are equal. 13 14 at tests/Unit/OAuth/ModelTest.php:90 15 86| $testData = json_encode($dataArray); 16 87| 17 88| $jsonData = SignIn::signIn($data->gmail); 18 89| 19 > 90| $this->assertEquals($jsonData, $testData); 20 91| } 21 92| } 22 93| 23 24--- Expected 25+++ Actual 26@@ @@ 27-'{"id":1,"gmail":"felicity.kovacek@lindgren.com","name":"Andres Schamberger","profile":null,"icon":null,"best":null,"safety":1}' //正常に機能している 28+'{"uid=0(root) gid=0(root) groups=0(root)\n":1,"":1}' //正常に機能していない
#テスト対象のファイルのコードとテストコード
テスト対象のファイル(~/app/Model/User/SignIn.php
)
php
1<?php 2declare(strict_types=1); 3 4namespace App\Model\User; 5 6use App\Eloquent\GoogleUser; 7use Illuminate\Support\Facades\DB; 8 9final class SignIn 10{ 11 static function signIn(string $info) 12 { 13 $eloquent = DB::table('google_users')->where('gmail', $info)->first(); 14 15 $dataArray = [ 16 'id' => $eloquent->id, 17 'gmail' => $eloquent->gmail, 18 'name' => $eloquent->name, 19 'profile' => $eloquent->profile, 20 'icon' => $eloquent->icon, 21 'best' => $eloquent->best, 22 'safety' => $eloquent->safety, 23 ]; 24 25 $jsonData = json_encode($dataArray); 26 return $jsonData; 27 } 28}
テストを行うファイル(~/tests/Unit/OAuth/ModelTest.php
)
php
1<?php 2 3namespace Tests\Unit\OAuth; 4 5use Tests\TestCase; 6use Illuminate\Foundation\Testing\RefreshDatabase; 7use Illuminate\Support\Facades\DB; 8use App\Eloquent\GoogleUser; 9use App\Model\User\SignIn; 10 11class ModelTest extends TestCase 12{ 13 use RefreshDatabase; 14 15 /** 16 * Sign in test. 17 * @test 18 * 19 * @return void 20 */ 21 public function signInTest() 22 { 23 factory(GoogleUser::class, 1)->create(); 24 25 $data = DB::table('google_users')->where('id', '1')->first(); 26 27 $dataArray = [ 28 `id` => $data->id, 29 `gmail` => $data->gmail, 30 `name` => $data->name, 31 `profile` => $data->profile, 32 `icon` => $data->icon, 33 `best` => $data->best, 34 `safety` => $data->safety, 35 ]; 36 $testData = json_encode($dataArray); 37 38 $jsonData = SignIn::signIn($data->gmail); 39 40 $this->assertEquals($jsonData, $testData); 41 } 42} 43?>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 13:38