2016-10-25 5 views
0

Wenn ich versuche, folgenden Code auf Spezifikationen durchzuführen, gibt es mir stack level too deep. Funktioniert gut in der Konsole.Stapelebene zu tief in 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 

Wie sollte ich es beheben, um stack level too deep zu vermeiden?

Antwort

1

Sie haben einen Fehler im Code, letzte Zeile des select_reconciliation? Methode nach dem || Sie haben order_fulfillments_without_receipts aber ich denke, Sie @order_fulfillments_without_receipts gemeint

Ohne die @ Sie den Aufruf der order_fulfillments_without_receipts Methode, daher der Endlosschleife.

Warum dies in Ihren Tests passiert, und nicht in der Konsole mit dem zu tun, was sein muss receipt_urls_empty in jedem Fall, es ist false in Ihren Tests und in der Konsole true es ist.