TECH CAMP 24日目 痛恨のエラー

自分用のアウトプット。

単体コードテスト。

画像がActive Storageに保存されているかを確認。
message = FactoryBot.create(:message)
message.image.attached?
→trueが返ってくればOK

以前にもやった内容の復習。
正常系を確認する時は
expect(@◯◯◯).to bevalid

異常系を確認する時は
@◯◯◯.valid? を記述してエラー内容を出してから
expect(@◯◯◯).to include(“エラー文”) で、こちらが想定しているエラー文が出てくればtrueになる。

結合テストコード

System Specを使って実装する。
まずユーザーログイン機能のテストで、ログインしていない状態でサインページに移動すると新規登録画面へ遷移することを確認。

visit root_path
expect(current_path).to eq new_user_session_path

と記述してターミナルで実行するとテストが行われるんだけど、そこでエラーが発生。
コードの書き方とかじゃなく、テンプレートエラーやら謎の内容。
しかもこの日は社員研修が行われるため13時以降質問ができない、と。
普段そんなに質問してなかったので別にいいかなと思ってたんだけど、見事に14時過ぎくらいにこのエラー。

自分なりに色々ググって調べるも、解決には至らず。
結局1時間くらい格闘してたんだけど、よく分からなかったのでとりあえず結合コードは飛ばして、課題図書というやつを進めました。

課題図書

レスポンシブWebデザインについて

画面幅によって見た目が変わるようにWebサイトやアプリケーションのデザインを行うことをレスポンシブWebデザインという。

レスポンシブ対応にする方法
・表示領域の設定をする
・画面サイズによってCSSを切り替えるための設定をする
・画面サイズごとに適用するCSSを記述する

viewport(表示領域)の設定
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″ />
device-widthで、ブラウザの大きさを機器の大きさに合わせる。
initial-scaleは画面の拡大率で、1.0は拡大率に変更なし、という意味。

画面幅が500px以下の時にのみ、pタグのfont-sizeを10pxにしたい場合。
@media (max-width: 500px) {
  p {
      font-size: 10px;
    }
}  というように記述。

メディアクエリ
表示された画面幅に応じて適用するスタイルを切り替える機能。

ブレークポイント
メディアクエリによって規定されるスタイル適用の分岐点。

Rubyの記法について

case文
条件分岐を表現するための記法。
複数の条件を指定する時に、if文のelsifを重ねるよりシンプルに記述できる。

if文の場合
country = “Japan”
if country = “America”
  puts “Hello”
elsif country = “France”
  puts “Bonjour”
elsif country = “Japan”
  puts “こんにちは”
else
  puts “……”
end
↑countryの中身がAmericaならHello、そうではなくてFranceだったらBonjour、そうではなくてJapanだったら、それ以外だったら……を出力する。

case文の場合
country = “Japan”
case country
when “America”
  puts “Hello”
when “France”
  puts “Bonjour”
when “japan”
  puts “こんにちは”
else
 puts “……”
end という風に記述できる。少しシンプル。

while文
繰り返し処理を行うための構文。
指定した条件が真である間、処理を繰り返す。
number = 0
while number <= 10
  puts number
  number =+ 1
end
初めに0を代入、10以下なら出力して1を足す。
これを繰り返すので、結果0から10までの連番が出力される。

無限ループ
処理が永遠に繰り返されること。
上記のコードの場合、number += 1を削除すると無限ループになる。

break
eachメソッドやwhile文などのループから脱出するために使う。
if文などの条件分岐と組み合わせて、特定の条件の時にループを脱出させられるように記述。

eachやtimesなどのdoからendまでの間の記述をブロックという。

yield
メソッドに渡されたブロックを実行するための命令。
Rubyにおいては、取って代わられる、というイメージ。

def greetinf
  puts “Hello”
  yield(“Good afternoon”)
end

greeting do |text|
  puts text
end  と記述すると、HelloとGood afternoonが出力される。

def greeting($block)
  puts “Hello”
  block.call(“Goodbye”)
end

greeting do |text|
  puts text
end  というような記述もできる。

クラスの継承
既存のクラスを元に新しいクラスを作ること。

新しいクラス < 元となるクラス と記述。
新しいクラスを子クラス(サブクラス)、元となるクラスを親クラス(スーパークラス)という。
クラスを継承すると、親のインスタンス変数やインスタンスメソッドが引き継がれる。

オーバーライド
親クラスのメソッドを、子クラスに同名のメソッドを定義することによって上書きすること。

標準ライブラリ
インストール不要、使用時は明示的に読み込む必要がある。
日付を扱うDateクラスなど。

require “date”
puts Date.today で今日の日付が出力される。

組み込みライブラリ
標準ライブラリの中でも使用頻度が高い。
使用時に読み込みは不要。
文字列のstringクラス、数値のintegerクラス、配列のArrayクラス、ハッシュのHashクラスなど。

外部ライブラリ
gemのこと。
rails、rspec、fakerなど。

gem install faker
require ‘faker’
puts Faker::Name.name で使える。

例外処理について

例外
ある処理を実行した際の結果が期待されるものと異なる状況のこと。

例外処理
例外となる結果を得た時に行う処理。

メインの処理に失敗したらその時だけ別の処理を実行し…
 →そのままメインの処理を続ける
 →メインの処理の全てを無かったことにして中止する
の2通りがある。

Rakeタスク
タスクを簡単に実行できるRubyのツール。

incrementメソッド
カラム名と数字を引数に引き取り、引数の数だけカラムの値を増加させる。

begin
例外となりそうな箇所を囲い処理を実行できる文法。
どんな条件でも最低一回は処理を実行する。

rescure
発生した例外を補足し、例外が起こった際に呼び出される条件節。

記述例)
begin
  1 / 0 ←数値を0で割ろうとするとZeroDivisionErrorが発生。
rescue ←例外が発生した時にrescue以下の処理が呼ばれる。
  puts ‘0で割ることはできません’
end  end以降の処理も実行される。

eachやtimesなどの繰り返し中に例外が発生した場合、通常は繰り返し処理は途中で中止され、次のループも実行されない。(普通のエラー)
繰り返し処理の内部にrescueを記述すると、例外が発生したとしても次のループに移る。

ここまで!
課題図書の方はずんずん進んでいくから情報量が多い…!
今日はなんとしてでもエラーになってた結合テストコードを成功させねば。
記述の仕方自体はまぁまぁ分かるから、最初のエラーだけクリアできれば後はいけるはず!
ということで25日目も頑張ります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする