Мне очень трудно имитировать отказ метода уничтожения в моем контроллере.
Уничтожение моего контроллера выглядит так:
def destroy
project = Project.find(params[:id])
project.destroy
if project.destroyed?
render json: {
project: nil,
message: "The project was successfully deleted"
}
else
render json: {
message: "Could not delete project",
}, status: :unprocessable_entity
end
end
Я пытаюсь отобразить json в блоке else в своем тесте, но не могу это сделать. Пока конкретный тест выглядит так:
describe "DELETE #destroy" do
let!(:project) { create(:project, :open) }
context "when invalid" do
it "returns an error if the project was not deleted" do
expect(Project).to receive(:find).with(project.id.to_s).and_call_original
expect(project).to receive(:destroy).and_return(false)
delete :destroy, id: project
end
end
end
Тест либо возвращает «счастливый путь», либо выдает мне ошибки. В данный момент:
Failure/Error: expect(project).to receive(:destroy).and_return(false)
(#<Project:0x007f87cf5d46a8>).destroy(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
Если бы кто-нибудь мог указать мне правильное направление и объяснить, как я могу смоделировать 422, я был бы очень благодарен!