Rails RSpec controller test changes second attribute -


i have controller called "crosslayerparamterscontroller". if 1 specified attribute (donor_layer) updated. want attribute (donor_material) set "0".

in controller update method i'm checking if donor_layer params present , if donor_material set 0:

controller file:

cross_layer_parameter_controller.rb   def update     @stack = stack.find(params[:stack_id])     @cross_layer_parameter = crosslayerparameter.find(params[:id])     if params[:cross_layer_parameter][:donor_layer]       @cross_layer_parameter.donor_material = 0     end      respond_to |format|       if @cross_layer_parameter.update(cross_layer_parameter_params)         new_rows = render_to_string('stacks/_cross_layer_parameters.html.erb', layout: false, locals: { stack: @stack} )         id = @cross_layer_parameter.id         format.html { redirect_to(@stack) }         format.json { render json: { new_rows: new_rows, id: id, status: 200 } }       else         format.html { redirect_to edit_stack_path(@cross_layer_parameter) }         format.json { respond_with_bip(@cross_layer_parameter) }       end     end   end 

this working expected , want write rspec test in controller tests checks that. until have:

rspec test file:

cross_layer_parameter_controller_spec.rb  describe 'put #update' context "with params donor_layer or acceptor_layer"   before     post :update, params: { stack_id: @stack.id, donor_layer: 5, id: @cross_layer_parameter.id, cross_layer_parameter: factorygirl.attributes_for(:cross_layer_parameter) }     @cross_layer_parameter.reload   end    "should changed donor material '0'"     expect(@cross_layer_parameter.donor_material).to eq 0   end end 

end

i suspect factorygirl messing i'm not sure. there way test wittout using factorygirl? i've tried put underneath didn't work.

post :update, params: { stack_id: @stack.id, donor_layer: 5, id: @cross_layer_parameter.id } 

factorygirl file:

cross_layer_parameter.rb  require 'faker'  factorygirl.define   factory :cross_layer_parameter     donor_layer { faker::number.between(0, 10) }     donor_material { faker::number.between(0, 10) }     acceptor_layer { faker::number.between(0, 10) }     acceptor_material { faker::number.between(0, 10) }     interaction { faker::number.between(1, 9) }     value { faker::number.decimal(2) }   end end 

you should not add params params argument there. first part type of action , action (put , update) , rest params. here code sample put update:

let(:params) { { attachment: '' } } let(:action) { put :update, parent_id: parent.id, id: object.id, object: params } 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -