kurasus/events_controller の system spec - 不定期刊 Rails App を作る(34)

RailsApp Rails RSpec Capybara 2018年 12月 21日

イベントに関連するテスト

  1. イベントの作成,編集,削除,表示についてテストを行う.
  2. require 'rails_helper'
    
    RSpec.describe :Events, type: :system do
      include Devise::Test::IntegrationHelpers
      teacher_login :hkob
      let(:kurasu) { kurasu_factory :hkob2300 }
    
      it 'イベントを作成できること' do
        visit kurasu_events_path(kurasu)
        click_on '編集モードに入る'
        click_on 'イベント作成'
        fill_in 'イベント名', with: 'ホール行事'
        fill_in '日付', with: '2018/4/7'
        fill_in '並び順', with: '1'
        click_on '登録'
        expect(page).to have_content 'イベントを登録しました.'
      end
    
      context '始業のイベントが存在する時' do
        let!(:start2300_0406) { event_factory :start2300_0406 }
        it 'イベントを編集できること' do
          visit kurasu_events_path(kurasu)
          click_on '編集モードに入る'
          click_on 'イベント編集'
          fill_in 'イベント名', with: 'ホームルーム'
          click_on '更新'
          expect(page).to have_content 'イベントを更新しました.'
          expect(page).to have_content 'ホームルーム'
        end
    
        it 'イベントを削除できること' do
          visit kurasu_events_path(kurasu)
          click_on '編集モードに入る'
          click_on 'イベント削除'
          page.driver.browser.switch_to.alert.accept
          expect(page).to have_content 'イベントを削除しました.'
          expect(page).not_to have_content '2301'
        end
    
        it 'イベントを表示できること' do
          visit kurasu_events_path(kurasu)
          click_on 'イベント表示'
          expect(page).to have_content '始業'
        end
      end
    end
  3. テストがいくつか失敗していた.いくつか view の設定に失敗していたためである.view は request spec ではテストできないところが,システムテストで確認できた.
  4. まず,イベントの作成に失敗していた.app/views/kurasus/events/_form.html.haml で kurasu_id の hidden_field を忘れていたためである.以下のように hidden_filed を追加した.
  5.         = f.hidden_field :kurasu_id
  6. また app/views/kurasus/events/index.html.haml でイベント名の描画を忘れていた.
  7. (前略)
      %thead
        %tr
          - t_ars(Event, %i[name date sort_order]).each do |w|
            %th= w
          %th= t('control')
      %tbody
        - @events.each do |e|
          %tr
            %td= e.name
            %td= md_by_date e.date
            %td= e.sort_order
    (後略)
  8. guard の結果は以下のようになった.

長くなったので今日はここまで