lundi 23 novembre 2015

Rails database persistance through tests

I'm writing tests for my current rails project and I'm running into an issue whereby changes made to the test database through a post call aren't persisting long enough to test the changes.

Basically, I have objects which have a barcode assigned to them. I have put in a form whereby a user can scan in several barcodes to change multiple objects at a time. This is the code.

objecta_controller.rb:

  def change_many
    @barcodes = params[:barcodes].split()
    @objects = ObjectA.order("barcode").where(barcode: @barcodes)
    @objects.each do |b|
      if can? :change, b
        b.state_b()
      end
    end
  end

(Note: @barcodes is a string of barcodes seperated by whitespace)

objecta_controller_test.rb:

test "change object" do
    sign_in_as(:admin_staff)

    b = ObjectA.new(
      barcode: "PL123456",
      current_status: "state_a")
    post :change_many, { barcodes: b.barcode }

    assert_equal("state_b", b.current_status, "Current status incorrect: #{b.to_s}")
  end

Using byebug, I've ascertained that the objects do change state in the change_many method, but once it gets back to the test the object's state reverts back to its old one and the test fails.

Aucun commentaire:

Enregistrer un commentaire