say77’s blog

個人の技術的な調べものメモ、覚書など。

Ruby on Rails チュートリアルで詰まった話(7章)

Ruby on Rails チュートリアルをゆっくりと進めています。

以下、自分の学習の記録として。

 

詰まった箇所

7.3.4 失敗時のテスト  演習の1

 

リスト 7.20で実装したエラーメッセージに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。リスト 7.25にテンプレートを用意しておいたので、参考にしてください。 

 

詰まった原因

 Google Chromeで動的なページのソースを見たいときには

右クリックから「ページのソースを表示」ではなくて「検証」。

(すぐ下に見えていてもハマっているときは気づかないものですね…)

 

自分の答え

  #Signup失敗時のテスト
  test "invalid signup information" do
    get signup_path
    
    #POST先が正しいかのテスト
    assert_select "form[action=?]", signup_path
    
    #不正なUserデータをPOSTしてテスト
    assert_no_difference 'User.count' do
      post signup_path, params: { user: { name:  "",
                                         email: "user@invalid",
                                         password:              "foo",
                                         password_confirmation: "bar" } }
    end
    assert_template 'users/new'
    assert_select "div#error_explanation"
    assert_select 'div.field_with_errors'
    assert_select 'ul' do
      assert_select 'li', 'Name can\'t be blank'
      assert_select 'li', 'Email is invalid'
      assert_select 'li', 'Password confirmation doesn\'t match Password'
      #パスワードの文字数制限が変わった時のため、文字数部分のエラーメッセージより前で部分一致を検証
      assert_select 'li', /Password is too short*/
    end
  end

 

上手い人だともっと奇麗に書くのかもしれませんが…