Railsのシステムテスト

2025-07-25 ruby rails

仮想のブラウザを立ち上げてのテストが可能です。以下のような要領でテストをします。 めちゃくちゃ便利そうなんですけど、このSystemTestCaseのドキュメントがなかなか見当たらず苦戦しています。 AIの提案するコードも「そういうの書けたらいいよね!でも動かないね!」ってのが多くて、うまくいかず😅

いつかもうちょっと掘り下げて書いてみたいな、ということでメモを残しておきます。

require "application_system_test_case"

class ItemsTest < ApplicationSystemTestCase
  setup do
    @item = items(:one)
    @admin_user = users(:admin)

    # adminユーザーでログイン
    visit new_session_path

    fill_in "email_address", with: @admin_user.email_address
    fill_in "password", with: "password"
    click_on "ログイン"

    # ログイン成功を確認
    assert_text @admin_user.name
  end

  test "visiting the index" do
    visit items_url

    # for debugging purposes
    # puts "Current URL after visiting items: #{current_url}"
    # puts "Page title: #{page.title}"
    # puts "Page has h1?: #{page.has_css?('h1')}"
    # puts "Page source snippet: #{page.body[0..500]}"

    # ログインできているか確認
    assert_no_text "ログイン" # ログインボタンが表示されていないことを確認
    assert_selector "h1", text: "商品"
  end

  test "should create item" do
    visit items_url
    click_on "新規作成"

    fill_in "Name", with: @item.name
    fill_in "Sizes", with: @item.sizes
    fill_in "Memo", with: @item.memo
    click_on "保存"

    assert_text "商品を作成しました。"
    click_on "戻る"
  end

  test "should update Item" do
    visit item_url(@item)
    click_on "編集", match: :first

    fill_in "Name", with: @item.name
    fill_in "Sizes", with: @item.sizes
    fill_in "Memo", with: @item.memo
    click_on "Update Item"

    assert_text "商品を更新しました"
    click_on "戻る"
  end

  test "should destroy Item" do
    visit item_url(@item)
    click_on "削除"

    assert_text "商品を削除しました。"
  end
end