vendredi 5 juin 2015

force database update to fail

I am testing a controller and would like to force a db update to fail in order to verify that my error handling is working properly. I am fairly new to rails so I apologize if I am not following all of the best practices. Below is the relevant code:

Code is not complete as to focus on the important parts relevant to this question.

Controller:

class SomeController < ApplicationController

  ...

  # relevant actions
  def enable
    able true
  end

  def disable
    able false
  end

  ...

  private 

  def able (b)
    ...
    # @dbobject will be set in a 'before_filter' function
    if @dbobject.update_attribute(enabled: b)
      # do some stuff
    else # <------ need to force execution of this block
      # error handling, logging, boring stuff
      redirect_to @dbobject
    ...
  end

  ...

end

Test:

class SomeController::AbleTest < ActionController::TestCase
  tests SomeController

  setup
    # create @dbobject
  end

  test 'redirect occurs on update fail' do
    get :enable, id: @dbobject
    assert_redirected_to @dbobject
  end 

  ...

end

I also have tests in SomeController::AbleTest that require update_attribute to work properly so I would prefer to stay away from overriding the method completely. Is there any way to force the db to raise an exception if this record is accessed or something similar? I am not able to call the able method directly from the test class because it relies heavily on instance variables set by various before_filter methods and it feels too much like fighting the framework to not make the get :enable and have these methods run automatically.

Aucun commentaire:

Enregistrer un commentaire