2013-08-05 49 views
1

我使用這個代碼,它從報表類規範的測試導出CSV文件

class Reports::Donors < Reports::Report 

    def initialize(args = {}) 
    super(args) 
    @campaign = args[:report] 
    @campaign.report.data[:donations][:tiers].each do |contribution_tier| 
     @data = [] 
     tmp_arr = [] 
     tmp_arr << ActionController::Base.helpers.number_to_currency(contribution_tier.amount_in_dollars) 
     @data << tmp_arr 

     @data << ['Date','User Name','Amount in dollars','Address','Email','State'] 

     contribution_tier.contributions.sort{|a,b| a.amount_in_dollars <=> b.amount_in_dollars}.each do |c| 
     tmp_arr = [] 
     tmp_arr << c.created_at 
     tmp_arr << c.user.full_name 
     tmp_arr << ActionController::Base.helpers.number_to_currency(c.amount_in_dollars) 
     tmp_arr << c.user.address 
     tmp_arr << c.user.email 
     tmp_arr << c.state.titleize 
     @data << tmp_arr 
     end 
     if @campaign.report.data[:donations][:non_tier][:sum] > 0 
      @campaign.campaign.open_contributions.sort{|a,b| a.amount_in_dollars <=> b.amount_in_dollars}.each do |c| 
      tmp_arr = [] 
      tmp_arr << c.created_at 
      tmp_arr << c.user.full_name 
      tmp_arr << ActionController::Base.helpers.number_to_currency(c.amount_in_dollars) 
      tmp_arr << c.user.address 
      tmp_arr << c.user.email 
      tmp_arr << c.state.titleize 
      @data << tmp_arr 
      end 
     end 
     end 
    end 

內在生成CSV導出文件,我需要爲此編寫一個規範的,但我不不知道從哪裏開始。

回答

1

FWIW--後來研究一種方法,試圖提出一個規範會導致挫折,內疚和狂歡。如果你使用TDD來創建它,它將被分解成容易驗證的小方法。提示:將您的代碼分解爲小方法。測試這些方法。