RAILS:db count在规范中始终为0

时间:2017-01-25 17:59:53

标签: ruby-on-rails rspec

以下是Rails 4.2中的一个简单的规范案例:

it "returns redirect to Save & Copy" do
        user_access = FactoryGirl.create(:user_access, :action => 'create', :resource =>'simple_orderx_orders', :role_definition_id => @role.id, :rank => 1,
        :sql_code => "")
        session[:user_id] = @u.id
        q1 = FactoryGirl.create(:simple_orderx_order)
        q = FactoryGirl.attributes_for(:simple_orderx_order)
        FactoryGirl.create(:project_misc_definitionx_misc_definition, :resource_id => q1.id, :resource_string => 'simple_orderx_orders', definition_category: 'production_step')
        expect {
        get 'create', {:order => q, commit: I18n.t('Save & Copy')}     
        expect(response).to redirect_to URI.escape(SUBURI + "/view_handler?index=0&msg=Successfully Saved!")
        }.to change(ProjectMiscDefinitionx::MiscDefinition.all.reload, :count).by(1)
      end
    end

在调试器中,有一条新记录被添加到表MiscDefinitionMiscDefinition.all.count已添加到2,但在规范中,ProjectMiscDefinitinox::MiscDefinition.all.count始终为0且规范案例失败了。什么可能导致规格中的计数错误?

以下是控制器中的create

def create
      @order = SimpleOrderx::Order.new(new_params)
      @order.last_updated_by_id = session[:user_id]
      @order.entered_by_id = session[:user_id]
      @order.fort_token = session[:fort_token]
      copy_steps(@order) if params[:commit] == I18n.t('Save & Copy')  #copy mfg steps from previous  order
      if @order.save
        copy_steps(@order.reload) if params[:commit] == I18n.t('Save & Copy')  #copy mfg steps from previous  order
        redirect_to URI.escape(SUBURI + "/view_handler?index=0&msg=Successfully Saved!")
      else
        @erb_code = find_config_const('order_new_view', session[:fort_token], 'simple_orderx')
        flash[:notice] = t('Data Error. Not Saved!')
        render 'new'
      end
    end

def copy_steps(order)
      obj = Order.where('drawing_num = ? AND id != ?', order.drawing_num, order.id).order('created_at DESC') if order.drawing_num.present? #find the previous order of the same drawing#
      obj = Order.where('part_num = ? AND id != ?', order.part_num, order.id).order('created_at DESC') if obj.blank? && order.part_num.present?
      obj = Order.where('part_name Like ? AND id != ?', "%#{order.part_name}%", order.id).order('created_at DESC') if obj.blank? && order.part_name.present?
      copied = false
      obj.limit(4).each do |o|
        SimpleOrderx.production_step_class.where('resource_id = ? AND resource_string = ? AND definition_category = ?', o.id, params[:controller].sub('/', '_'), 'production_step').each do |r|
          new_step = SimpleOrderx.production_step_class.new()
          new_step = r.dup
          new_step.resource_id = order.id
          begin
            new_step.save
            copied = true
          rescue => e
            flash[:notice] = 'Error in copying production steps: ' + e.message
          end    
        end 
        return if copied
      end if obj.present?
    end

0 个答案:

没有答案