【minitest】input要素の文字列はvalue属性の値を検証しなければならない

結論

input要素で表示されている文字列の検証はvalue属性の値を検証する必要がある。

  • input要素のvalue属性の値の検証は、[value='値']で検証対象を取得できる
  • textarea要素の文字列の検証は、text: 'テキスト' でタグで囲まれた文字列を検出できる

input要素とtextarea要素のテキストの表示方法の違い

  • input要素: value属性で表示テキストの値を持つ
  • textarea要素: 開始タグと終了タグで囲まれたテキストが表示される

具体例

例) 以下のフォーム内に表示されている文字列の表示テストを行う

<form action="..." accept-charset="UTF-8" method="post">>
  <div>
    <input type="text" value="インプットの文字列" name="..." id="input">
    <textarea name="..." id="textarea">テキストエリアの文字列</textarea>
  </div>
  <div>
    <input type="submit" name="commit" value="更新する">
  </div>
</form>

失敗するテスト

input要素の文字列はassert_text では検出できない(input内の文字列はテキストでは無いため)。

class DisplayTest < ApplicationSystemTestCase
  test 'インプットの文字列が表示される' do
    # テスト対象の文字列を取得できないためエラー
    assert_text "インプットの文字列"
    # パスする
    assert_text "テキストエリアの文字列"
  end
end

成功するテスト

input要素のvalueの値を検証することで文字列を検出できる。

class DisplayTest < ApplicationSystemTestCase
  test '' do
    # input idを持つインプット要素のvalue要素の値を検証
    assert_selector "input#input[value='インプットの文字列']"
    assert_text "テキストエリアの文字列"
  end
end

参照

Rails テスティングガイド - Railsガイド

感想

input要素の文字列が検出できずにハマった... HTMLもテストも奥が深い。