2016-10-25 1 views
0

Lorsque j'essaie d'effectuer le code suivant sur les spécifications, il me donne stack level too deep. Fonctionne très bien dans la console.niveau de la pile trop profond dans rspec

def order_fulfillments_without_receipts 
     @order_fulfillments_without_receipts = [] 
     OrderReconciliation.includes(:order_fulfillment). 
     where(data_entry_status: OrderReconciliation.data_entry_statuses[:pending_entry]). 
     find_in_batches do |group| 
      group.select do |reconciliation| 
      select_reconciliation?(reconciliation) 
      end 
     end 
     @order_fulfillments_without_receipts 
    end 

    def select_reconciliation?(reconciliation) 
     order_fulfillment = reconciliation.order_fulfillment 
     receipt_urls_empty = order_fulfillment.get_receipt_urls.empty? 
     order_fulfillment_id = order_fulfillment.id 
     @order_fulfillments_without_receipts << order_fulfillment_id 
     receipt_urls_empty || order_fulfillments_without_receipts.include?(order_fulfillment_id) 
    end 
    end 

Comment dois-je fixer pour éviter stack level too deep?

Répondre

1

Vous avez un bug dans votre code, la dernière ligne de la méthode select_reconciliation? après la || vous avez order_fulfillments_without_receipts mais je pense que vous vouliez dire @order_fulfillments_without_receipts

Sans @ que vous appelez la méthode order_fulfillments_without_receipts, d'où la boucle infinie.

Pourquoi cela se passe dans vos tests et non dans la console doit être à voir avec ce receipt_urls_empty est dans chaque cas, dans vos tests, il est false et dans votre console, il est true.