ほげほげパッチ

有る事無い事 徒然なるままに

RSpec

今日は、「コピペせず、1回はする」を試してみた。

結構頭に入る。

RSpec

「Spec」 = テストコード
Ruby」 + 「Spec」 = Rubyのテストコード

なぜ Spec = テストコード?

≪chatGPT先生≫
「spec」という用語は、「specification」(仕様)の略称として使われることがあります。テストコードは、プログラムの機能や振る舞いが正しく動作するかどうかを確認するために書かれるものであり、そのプログラムの仕様に基づいて動作するべきものです。そのため、テストコードはプログラムの仕様を具体的に表現する一部と考えることができます。

このような背景から、「spec」という用語はテストコードやテストスイートを指すのに使用されることがあります。

チェック機能と言いながら、それが自体が仕様を表現しているということらしい。(へー)

RSpecフレームワーク

Rubyの中で、もう一つのフレームワークが動いている」ということを意識すると理解しやすい(らしい)

メソッド関係

  • spec/rails_helper.rb

    • Railsのテストをするときの共通の設定を書いておくファイル。
    • テストファイルは、require 'rails_helper'でこのファイルを読みにいく。
  • describeメソッド

  • itメソッド

    • describeと同じでグループを作る。
    • その一つ一つをexampleと呼ぶ。(個別にテストする'事例'的な?)

  • bundle exec

    • とりあえず'忘れず実行せよ'とのこと。
    • Gemの依存関係を整理
    • exec: (プログラム、計悪などを)実行する
      • execute? : 外まで(ex-)付いていく(sequor)、最後までやり通す、遂行する -> を実行する、を施行する、を処刑する*1

    • rspecコマンド = specディレクトリ内のテストコード実行
%  bundle exec rspec spec/models/user_spec.rb 
  • valid?メソッド

    • テストコード内の任意のタイミングでvalidatesを実行できるメソッド。
      • truefalseを返す
      • falseの場合はエラーメッセージを生成する
        valid?があって初めてerrorsメソッドが使える)

  • expectation: 期待、想定

    • 想定通り動くかの確認 = '想定する挙動' + 'アプリの挙動'
    • 雛形 expect().to matcher()
      • matcher = include(包含する) or eq(=equal: 等しい)
      • expectの引数と'match'してるか確認できる

  • errorsメソッド

    • エラー内容を確認できる。
    • full_messages = ’エラーメッセージ'を'配列'として返す
#user = User.new(nickname: '')
[4] pry(main)> user.errors
=> 
<ActiveModel::Errors [#<ActiveModel::Error attribute=nickname, type=blank, options={}>]>
#user = User.new(nickname: '')
[6] pry(main)> user.errors.full_messages
=>
 ["Nickname can't be blank"]


英単語

  • factory: 作る(facio)場所(-orium) -> 工場、製造所、製作所

    • factor: factus(作った)+-tor(~するもの) -> 要因、因数
    • fact: 実際にした(factus)こと -> 事実、真相、現実
    • affect: ~へ(ad-)作り出す(facio)、~へ作用する -> に作用する、を感動させる
    • effect: 作り(fectus)出した(ex-)、作り出した結果 -> 効果、結果、影響
    • defect: 不完全に(de-)作られた(fectus)こと -> 欠陥、短所、欠点

  • instance: 上に(in-)立っ(sto)ている(-ans)こと(-ia)、近くに存在すること -> 例、場合、出来事

    • substance: 下に(sub-)立っ(sto)ていること(-ance)、根っこにあること -> 物質、重要性、実質
    • circumstance: 周囲に(circum)立っ(sto)ていること(-ance) -> 周囲の事情、環境、状況
    • distance: 離れて(dis-)立っ(sto)ていること(-antia) -> 距離、離れた場所
    • obstacle: 前に(ob-)立つ(sto)道具(-culum)、邪魔なもの -> 障害物、妨害物、邪魔

  • confirm: 完全に(con-)堅固にする(firmo)こと -> 確かめる、承認する

    • affirm: 支持する、断言する
    • firm: 堅い(firmus)こと -> 堅い、頑丈な、断固とした
    • firm: 取引を堅固(firmus)にするために文書に署名した屋号 -> 商会、会社、事務所

  • execute: 外まで(ex-)付いていく(sequor)、最後までやり通す、遂行する -> を実行する、を施行する、を処刑する

    • exective: 外まで(ex-)付いていっ(sequor)ている(-ivus)、最期までやり通している、遂行している -> 役員、実行する、行政の
    • suit: sequor(後を追う) -> ぴったりと(sequor)あった服、罪の追求(sequor) -> スーツ、訴訟、適合するもの、似合う、服を着せる
    • second: 最初の数の後に続い(sequor)ている(-undus)数 -> 第二の
    • second: 第一の時間の小さな単位 [minute] に続く第二の(secunda)小さな(minutus)単位(pars) -> 秒、瞬間、一刻
    • persue: 前にあるものを(pro-)追い掛ける(sequor)こと -> 追跡する
      • persuit: 追撃
    • sequence: 続い(sequor)ている(-ens)こと(-ia) -> 連続、数列、順序
      • sequel: 続編
    • consequent: 一緒に(com-)後から続い(sequor)ている(-ens)こと -> 結果として生じる、当然の
    • subsequent: 下に(sub-)続い(sequor)ている(-ens)こと -> 次の、後続の

まとめ

  • テストの基本は、expect().to matcher()
    • これをexample単位で書いていく
    • it〜endとかdescribe〜endとかでグループ化

  • エラーメッセージを含むときはinclude同じ時はeq
  • 手が止まったら、コンソールとかbinding.pryで状況確認。