Проверка на наличие ошибок, выданных из AASM gem - PullRequest
0 голосов
/ 28 апреля 2018

У меня проблемы с тестированием на выданную ошибку AASM.

Вот мой метод управления:

# controllers/jobs_controller.rb
def change_state
  respond_to do |format|
    if @job.close && @job.save
      format.html { redirect_to @job, notice: 'Job has been closed.' }
      format.json { render :show, status: :ok, location: @job }
    else
      format.html { render :show, notice: 'Job could not be closed.' }
      format.json { render json: @job.errors, status: :unprocessable_entity }
    end
  end
end

Моя спецификация выглядит так:

# spec/controllers/jobs_controller_spec.rb
describe "POST #change_state" do
  it "cannot transition job from closed" do
    job.aasm_state = "closed"
    job.save!
    post :change_state, params: {id: job.hash_id, user_id: user.id}
    expect { response }.to raise_error(AASM::InvalidTransition)
  end
end

Тест не пройден (с ожидаемой / желаемой ошибкой):

Failure/Error: if @job.close && @job.save     
AASM::InvalidTransition:Event 'close' cannot transition from 'closed'.

Я просто не могу понять правильный синтаксис для прохождения теста. Я пробовал несколько вариантов линии expect, но, похоже, не смог собрать ее вместе.

Любое руководство приветствуется.

1 Ответ

0 голосов
/ 28 апреля 2018

Исключение происходит перед оператором expect. Попробуйте:

expect {
  post(:change_state, params: { id: job.hash_id, user_id: user.id })
}.to(
  raise_error(AASM::InvalidTransition)
)
...