5 votes

Rspec any_instance should_receive aurait dû recevoir les messages suivants mais ne l'a pas fait

J'ai un problème avec un test d'échafaudage pour rspec où any_instance.should_receive génère une erreur : Failure/Error : Impossible de trouver la ligne correspondante dans le backtrace. Une seule instance aurait dû recevoir le(s) message(s) suivant(s) mais ne l'a pas fait : update_attributes.

Code Rspec, utilisant FactoryGirl et strong_parameters :

describe "PUT update" do
   describe "with valid params" do
     it "updates the requested acquisition" do
       puts "starting updates the requested acquisition"
       acquisition = create(:acquisition)
       # Assuming there are no other acquisitions in the database, this
       # specifies that the Acquisition created on the previous line
       # receives the :update_attributes message with whatever params are
       # submitted in the request.
       Acquisition.any_instance.should_receive(:update_attributes).with(:acquisition =>    {:person_id => '10'})
      puts "before the put "
       put :update, :id => acquisition.id, :acquisition => { :person_id => '10'}
       puts "ending the updates the requested acquisition"
     end   
  end
end

Code du contrôleur :

def update
    @acquisition = Acquisition.find(params[:id])
    puts "acquisition is #{@acquisition.inspect}"
    respond_to do |format|
      if @acquisition.update_attributes!(acquisition_params)
        puts "updated the thing! #{@acquisition.inspect}"
        format.html { redirect_to(@acquisition, :notice => 'Acquisition was successfully updated.') }
        format.xml  { head :ok }
      else
        puts "failed to update the thing!"
        format.html { render :action => "edit" }
        format.xml  { render :xml => @acquisition.errors, :status => :unprocessable_entity }
      end
    end
  end

Sorties de test :

starting updates the requested acquisition
before the put
acquisition is #<Acquisition id: 502, sample_id: 7, person_id: 7, method: nil>
params is acqusition_params is {"person_id"=>"10"}
updated the thing! #<Acquisition id: 502, sample_id: 7, person_id: 10, method: nil>
ending the updates the requested acquisition
F

1) AcquisitionsController PUT update with valid params updates the requested acquisition
 Failure/Error: Unable to find matching line from backtrace
   Exactly one instance should have received the following message(s) but didn't: update_attributes

Étant donné que j'imprime l'objet mis à jour dans mon contrôleur et qu'il est correct, pourquoi le test échoue-t-il ?

Gracias.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X