プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

【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"のエラーが表示される。)