so-prog-engineer’s diary

ゼロからプログラミングを学習する人間の記録です

テストコードのまとめ( Rails)

アプリケーションを作成したら想定通りの挙動をするか確認する必要があるという。それはそう。

見た目を表示できるアプリなら自分でブラウザで表示させて必要な動作を手入力できないこともないけど間違い抜け漏れミスがあるしシステムが複雑になるほど時間かかるよね。だからアプリ内で確認用の挙動をするテストコードを用意してプログラムに判定してもらおう。

ぱそこんのしすてむってそんなこともできるんやね(無垢)

 

  • 挙動確認のおおまかな手順

①システムの挙動を洗い出す→②それぞれの反応を想定する→③テストコードを書いて実行させる

 

投稿系SNSだと投稿がページに表示されるとか、空白の(データが何も入力されていない)投稿ができないとか、ユーザー登録すれば投稿をアプリ内でブックマークできるとか、

「何か操作をしたら」

「できる(システムが作動する)」or「できない(システムが作動しない)」

というチェックをする。

 

チェックの種類分けもいくつかあって、

「できる(作成者が意図する操作を行ったときの挙動)」ことの確認を正常系、「できない(作成者が意図しない操作を行ったときの挙動)」ことの確認を異常系のケースという。

実装した機能を1操作ずつ部分的に確認する方法を単体テストコード、機能を実際にユーザーが使う際の一連の操作をまとめて確認する方法を結合(統合)テストコードという。

 

(続)

CSS 親要素の中へ配置するときの子要素の設定

  • overflow

overflow - CSS: カスケーディングスタイルシート | MDN

親のブロックレベル要素の中に子要素が収まらないときどのように表示するかの設定。

種類として①クリッピング、②スクロールバーの表示、③親からはみ出して周囲に表示するものがある。

:visible③

【初期設定】親要素からはみ出して表示される。

:hidden②

子要素は必要に応じて親要素に合わせて切り取られる。プログラム的には別プロパティを指定してスクロールできる設定になっているが、ユーザーがドラッグなどしてもスクロールできない。

:clip①

子要素は必要におじうて親要素に合わせて切り取られる。hiddenと違いスクロールする手段がない。

:scroll

子要素は必要に応じて親用をに合わせて切り取られる、というか隠される。親要素内でドラッグなどするとスクロールして隠れていた部分を表示できる。

ページをプリンター印刷すると親要素からはみ出して表示されるレイアウトで印刷される可能性がある。

:auto②

親要素内に子要素が収まる場合はvisibleと同じように表示され、はみ出す場合は親要素を拡張する。使用するブラウザによって挙動が変わる?

:overlay②

対応できるブラウザが限られている。autoと同じ挙動をするが場所をとる代わりにスクロールバーを表示する?

 

  • object-fit

<img><video>などの中身(コンテンツ)をボックス要素内にどのように嵌め込むかを設定する。

:contain

コンテンツはアスペクト比を保持したままボックス内に収まるように拡大縮小される。ボックスとコンテンツのアスペクト比が合わない場合は上下または左右に黒枠が表示される。

:cover

コンテンツはアスペクト比を保持したままボックス内全体を埋めるように拡大縮小される。ボックスとコンテンツのアスペクト比が合わないときはコンテンツが切り取られて表示される。

:fill

【初期設定】コンテンツはボックス内全体を埋める大きさになる。ボックスとコンテンツのアスペクト比が合わないときはボックスに合わせてコンテンツが引き伸ばされて表示される。

:none

コンテンツは拡大縮小されない。

:scale-down

noneまたはcontainが適用される。選択されるのはコンテンツの実際のサイズが小さい方。

Ruby include?メソッド

Array#include? (Ruby 3.2 リファレンスマニュアル)

 

array.include?(val)でオブジェクト内にvalが含まれているか判定する。

含まれているならtrue、そうでないならfalseが返される。

 

マニュアルには配列クラスのメソッドに分類されているが単品の文字列や数値にも使える。

Rails autofocus属性

  • autofocus: true

レスポンスが返ってきたときに、入力エリアを選択しなくともカーソルが移動した状態でページが表示される。

1つのhtmlファイルにつき1箇所まで有効にできる。

 

<%= form_with model: @***, url: ***path id: '***', local: true do |f| %>
        <%= f.label :*** %><br />
        <%= f.email_field :***, autofocus: true %>
      </div>

Ruby dateメソッド

Rubyには標準でDateクラスが設定してあり、日付の概念をプログラム上で扱うことができる。

require "date" と記述すると以降日付を扱える。(カレンダーを読み込むイメージ)

 

  • Dateクラスで使用するメソッド(変数に代入する)

・Date.today Dateオブジェクトを作成するメソッド。実行した年-月-日を取得する

例)day = Date.today

  puts day

 =>2000-01-01

 

・ Date.today.yaer 作成したDateオブジェクトから年を取得

・ Date.today.mon 作成したDateオブジェクトから月を取得

・ Date.today.mday 作成したDateオブジェクトから日を取得

・ Date.today.wday 作成したDateオブジェクトから曜日を数字として取得

(日曜日 = 0、月曜日 = 1、火曜日 = 2、…、土曜日 = 6)

 *today = Date.today.wday

  puts = today

 =>0

  ↑このときメソッドを実行した日は日曜日

Ruby on Rails エラー文集

  • Migrations are pending. To resolve this issue, run: rails db:migrate RAILS_ENV=development

pendingは「保留の」「未解決の」という意味。

マイグレーションが実行されていません。この問題を解決するには"rails db:migrate"を実行してください。」と記述してある。解消法まで教えてくれるエラー文があるのか……。

Ruby digメソッド

digメソッド

Array#dig (Ruby 3.2 リファレンスマニュアル)

配列とハッシュから値を取り出すメソッド。多重階層にあるハッシュの値を取り出すことができる。(配列の中にハッシュ、ハッシュの中にハッシュがあるなど)

 

profile = [

"名前",

status:{

 birth:20201231,

 hometown:"Tokyo",

 favorite:{

  food:"rice",

  sports:"tennis"

 }

}

]

 

このとき、

profile.dig(0)の出力結果は”名前”

profile.dig(1, :status, :favorite, :food)の出力結果は"rice"になる。