ほげほげパッチ

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

結合テスト#2

今日の学び

新単語は先に書き出すべし

テストは基本ミスってるところを教えてくれるから、それに従う。

必要とされるのは、知識より根気。。。

have_selector

セレクタの有無を確認

expect(page).to have_selector ".content_post[style='background-image: url(#{インスタンス変数とか});']"
# !カッコではなくスペース!

(追記2023/9/2)
セレクタの指定
 要素: a, p, img (ドットなし)
 属性: .クラス名, .id名 (ドットあり)

a要素に対して、リンクの有無を確認

expect('要素').to have_link 'ボタンの文字列', href: 'リンク先のパス'


当てはまるボタンがないことを確認

expect('要素').to have_no_link 'ボタンの文字列', href: 'リンク先のパス'


all

findは要素が1個の時しか使えない。allならまとめて取得できる。

# 同名のクラス 全要素
all('クラス名')

#◯番目のhogeクラス。
#一番上に表示されているのが[0]、二番目が[1]...
all('hoge')[0]


have_field

form要素の有無を確認。

#id名で指定するときに'#'はつけない。
have_field('id名')

#入力された内容まで確認するならwith
have_field('id名', with: "hoge")


find_link().click

a要素をクリックする時に使う

find_link('リンクの文字列', href: 'URL').click


サポートモジュール

spec/support/hoge_support.rbを作成して、その中にモジュールを定義

#モジュールを定義
module HogeSupport
  def hoge(user)
    ...
  end
end


spec/rails_helper.rbコメントアウトを外す。RSpec.configureに読み込み設定を追記。

# コメントアウトを外す
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }


RSpec.configure do |config|
# 下記を追記
  config.include HogeSupport

  ...

これでテストファイル内で、hoge(user)が使えるようになる。
(インスタンスメソッドの定義に似ている)

補足

chat GPT このコードの意味を以下に解説します:

  1. Dir[Rails.root.join('spec', 'support', '**', '*.rb')]: この部分は、Railsプロジェクトのルートディレクトリから始まり、spec/supportディレクトリ以下のすべての.rbファイルを再帰的に検索します。つまり、spec/supportディレクトリ以下のすべてのサポートモジュールファイルのパスの配列を生成します。

  2. .sort.each { |f| require f }: 生成されたファイルパスの配列をソートし、各ファイルをrequireメソッドを使って読み込みます。これにより、サポートモジュールがテストコードに利用可能になります。