[Laravel8.x] テスト用データベースでUnitテスト

Unitテストでは、テスト用のデータベースを作り、それでテストする。
Schemaを使う。

mysql> show databases;
mysql> show tables;

mysql> create database unittest;
$ php artisan migrate –env=testing

mysql> use unittest;
mysql> describe users;

use Illuminate\Support\Facades\Schema;
    public function testExample()
    {
        $this->assertTrue(
            Schema::hasColumns('users',[
                'id', 'name', 'email'
            ]),
            1
        );
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 00:00.086, Memory: 26.00 MB

OK (1 test, 1 assertion)

DBにデータ挿入

    public function testExample()
    {
        $user = new User();
        $user->name ="hpscript";
        $user->email = "info@hpscript.com";
        $user->password = "password";
        $user->role_id = 1;
        $saveUser = $user->save();

        $this->assertTrue($saveUser);
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 00:00.094, Memory: 26.00 MB

OK (1 test, 1 assertion)

mysql> select * from users;
+—-+———-+——————-+——————-+———-+——————-+—————————+—————-+—————+—————–+——————–+———————+———————+———+
| id | name | email | email_verified_at | password | two_factor_secret | two_factor_recovery_codes | remember_token | last_login_at | current_team_id | profile_photo_path | created_at | updated_at | role_id |
+—-+———-+——————-+——————-+———-+——————-+—————————+—————-+—————+—————–+——————–+———————+———————+———+
| 1 | hpscript | info@hpscript.com | NULL | password | NULL | NULL | NULL | NULL | NULL | NULL | 2021-01-03 16:44:08 | 2021-01-03 16:44:08 | 1 |
+—-+———-+——————-+——————-+———-+——————-+—————————+—————-+—————+—————–+——————–+———————+———————+———+
1 row in set (0.00 sec)

おおお、入ってる。

use RefreshDatabase;とすると、データが削除されます。

mysql> select * from users;
Empty set (0.00 sec)

なるほど、ちょっと理解してきた。

[Laravel8.x] Unitテスト基礎

単体テストがイマイチ腹に落ちない。
やりたいことは、controllerのメソッド単位でのテスト

$ php artisan make:test AdminTest
/tests/Feature/AdminTest.php

    public function testExample()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 00:00.144, Memory: 26.00 MB

OK (1 test, 1 assertion)

route/web.php

Route::get('/admin/test/form', [App\Http\Controllers\AdminController::class, 'testForm']);

AdminController

    public function testForm(){
        return "hello";
        // return view('admin.test');
    }
    public function testExample()
    {
        $response =  $this->get('/admin/test/form');
        $response->assertSee("hello");
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 00:00.086, Memory: 26.00 MB

OK (1 test, 1 assertion)

なるほど、$response->assertSee(); で確認するのか。assertEqualsとかassertSameで確認してた。

$ vendor/bin/phpunit tests/Feature/AdminTest.php

use App\Models\User;
public function testExample()
    {
        // $response = $this->get('/');
        $response =  User::all(); 
        dd($response);
        
    }

$ vendor/bin/phpunit tests/Feature/AdminTest.php
PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

Illuminate\Database\Eloquent\Collection^ {#1678
#items: []
}
なんでnullになるのか理解できん。
データベースのテストの方法が違うっぽいな。

[AWS S3] バケットに保存している複数画像を丸ごと一気にダウンロードする方法

コンソールログインだと、S3のバケットに保存している画像は1枚ずつしかダウンロードできません。
そんな馬鹿な。。。

1枚ずつ処理とか、プログラマーは絶対にやりません。そこを妥協するようであれば、プログラミング辞めるわ。
と言うことで、Cyberduckを使えば一括ダウンロードできるみたいなので、CyberDuckを使いたいと思います。

cyberduckで接続にsftpではなくAmazon S3を選ぶと、アクセスキーとシークレットキーを入れれば、バケットにアクセスできるようになります。

素晴らしい! 早く言ってよ。

unit(単体)テストとは?

unitテストとは、プログラムを構成する比較的小さな単位が個々の機能を正しく果しているかを検証するテスト
プログラム全体として正しく動作しているかを検証するのは結合テスト

### unitテストの種類
– ホワイトボックステスト
テスト対象関数のメソッドの内部構造に着目
– ブラックボックステスト
 入出力に着目する

### 具体的なやり方
– 書いたコードの全てが実行されるように書く
– 入出力の閾値を考えてテストする

なるほど、主要機能はホワイトボックスとブラックボックス両方やらないと駄目だな。

PSD・AIからHTMLへの書き出し

コーディングに必要なこと

– 画像のスライス(書き出し方法)
– 要素の幅・高さを取得する
– 要素間の余白を取得する
– フォント情報の取得

デザインデータから情報を取得してコーディングする。
言うが易しって感じもするが。。

[Photoshop] ヘックスコード

ヘックコードという
#000000
Red,Green,Blue
2桁ずつ16進数で使っている。
Fが一番大きい
00FF00は100%のグリーン

カラーホイール

ベースカラーを決めてから、
モノクロマティック、トライアド、捕色、分割補色、二重分割補色、正方形、コンパウンド、シェード、カスタムなど色の関係性で選べる。
-> 統一感のある配色を選択できる。

Photoshopからも使える
ウィンドウ->エクステンション->カラー

色の変え方
編集->塗りつぶし->描画色

シェイプの場合は、レイヤーパネルからダブルクリック
文字レイヤーの場合もレイヤーパネル

[Laravel8.x] エラーメッセージをモーダルで表示させたい

エラーメッセージをtextでも良いが、どちらかと言うとモーダルで表示させたい。

まず単純なフォームを作ります。

<body>
	@if(Session::has('flashmessage'))
    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
      {{ session('flashmessage') }}
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
	@endif
	<form action="/admin/test/form/confirm" method="post">
		@csrf
	<p>
	名前:<input type="text" name="name" size="40">
	</p>
	<input type="submit" value="送信">
	</form>

<script
  src="https://code.jquery.com/jquery-3.5.1.js"
  integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
  crossorigin="anonymous"></script>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script>
    // モーダルウィンドウ
    $(window).on('load',function(){
        $('#exampleModal').modal('show');
    });
</script>

controller

    public function testFormConfirm(Request $request){
        if($request->has('name') & $request->name !== NULL){
            session()->flash('flashmessage',$request->name. 'さん、登録完了');
        } else {
            session()->flash('flashmessage','エラー: 名前を入力してください');
        }

        return redirect('/admin/test/form');
    }

エラーのメッセージではなく、session flashで送るのか。なるほどね。

### 1冊やっておいても損はない本

[Photoshop] スウォッチ

Webデザインでは、RGBではなくWEBスウォッチを使うことが多いとの事。
HEXコードで登録する

レイヤーはWebデザインで一番良く使う機能。
シェイプツールの編集にパスを良く使用する。

なるほど、ちょっと色々考えることが多くなってきたな。

PSDファイルからHTMLにする流れ

PSD -> HTMLにする為の具体的な作業内容
ここが超絶重要なポイント、丁寧に深く理解する必要がある。

1. スケッチ(どのようなWebサイトを作っていくか)
2. ワイヤーフレーム(何ピクセルで作るかなど)
3. デザイン(色のパレットを決める、配色・配置)
4. 切り出し・書き出し・引き継ぎ
L ロゴ、メニューなどを切り出す作業をスライスという
L 各要素を適切なファイルサイズで書き出す
L 書き出したファイルを整理整頓する

なるほど、デザインしたものをスライスして書き出してる訳ね。
バナー作成の場合は基本的にデザインだけだが、Webページのデザインの場合はスライス・書き出しの作業があるから全然違うな。
OK、工程をちゃんと理解した。レイヤーをどう使ってるかなどは理解する必要があるな。