2016-10-25 2 views
0

Когда я пытаюсь выполнить следующий код по спецификациям, он дает мне stack level too deep. Работает отлично в консоли.уровень стека слишком глубокий в 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 

Как мне это исправить, чтобы избежать stack level too deep?

ответ

1

У Вас есть ошибка в вашем коде, последняя строка метода select_reconciliation? после || у вас есть order_fulfillments_without_receipts, но я думаю, что вы имели в виду @order_fulfillments_without_receipts

Без @ вы звоните метод order_fulfillments_without_receipts, следовательно, бесконечный цикл.

Почему это происходит в ваших тестах, а не в консоль должна делать с тем, что receipt_urls_empty в каждом конкретном случае, в тестах это false и в консоли это true.

Смежные вопросы