Как я могу проверить отсутствие (например,) @ project.save в моем контроллере, используя minitest в Rails? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь улучшить свое тестовое покрытие (только что установил simplecov) и было довольно приятно уже иметь хорошее покрытие.Тем не менее, я не ловил некоторые режимы сбоев в своих тестах, но я не знаю, как принудительно вызвать сбой, например, сохранения при создании объекта в Rails (5.2, если это имеет значение).Любые указатели о том, как заставить и поймать сбой методов save или update_attributes?

Мои основные тесты работают нормально.Я просто не знаю, как заставить код выполнять эти ветки в тесте!

Соответствующий метод контроллера:

def create
  @project = current_user.projects.build(project_params)
  if @project.save
    flash[:notice] = "Project created!"
    redirect_to user_path(current_user)
  else
    flash[:alert] = "There was an error. Your project was not created."
    render 'new'
  end
end

Первая ветвь этого теста (if @project.save)провереноВторой (else) нет.Тест, который я использую для проверки успеха, выглядит следующим образом:

sign_in @user
assert_difference 'Project.count', 1 do
  post projects_path, params: {project: {name: @new_project_name, user_id: @user.id}}
end
assert_redirected_to user_path(@user)

Что мне действительно нужно, так это то, где я могу assert_no_difference успешно!

1 Ответ

0 голосов
/ 13 мая 2019

save возвращает false при наличии ошибки проверки.

Посмотрите на вашу Project модель и получите параметры, которые не действительны. Например, если есть validates :some_field, presence: true, пропустите это поле, и проверка не удастся.

...