【RSpec】システムスペックを実装してみた
今回はRSpecのシステムスペックを実装しました。
学んだことを簡単に箇条書き。
学んだ事
beforeについて
before do visit edit_task_path(task) end
は、
before { visit edit_task_path(task) }
と1行で書く事ができる。
select_fieldのテスト
select ‘doing’, from: ‘Status’
Status
のラベルをもつselect_fieldから、doing
を選んでくれる。
confirmダイアログのテスト
expect(page.accept_confirm).to eq “Are you sure?”
このように書く事で、自動的にOKも押してくれる。
letとlet!の違い
簡単にいうと、let
は定義された定数が呼び出されない限り発動しない。
それに対して、let!
は常にその定数が発動している状態になる。
そのため・・・
describe 'タスクの削除', focus: true do let!(:task) { create(:task, user: user) } it 'タスクの削除が成功する' do visit tasks_path click_link 'Destroy' expect(page.accept_confirm).to eq "Are you sure?" expect(page).to have_content "Task was successfully destroyed." expect(current_path).to eq tasks_path expect(page).not_to have_content task.title end end
上のタスク削除のテストは、let
だと動作しない!!
(letだと、そもそもtask自体が作られずDestroyへのlinkも作成されず、Unable to find link "Destroy"
のエラーが表示される。)