2011-11-04 97 views
4

我在rails 3.1项目中有以下帮助 - 我只是想知道是否有方法来测试CSV.generate调用。我很想说我有一些想法如何去做,但事实是,我甚至不知道从哪里开始。任何想法赞赏。使用RSpec测试CSV.generate

require 'csv' 

module Admin::PurchasesHelper 
    def csv_purchase_list 
    columns = ['course', 'amount', 'first_name', 'last_name', 'contact_phone', 'contact_mobile', 'created_at'] 
    CSV.generate(:col_sep => ";", :row_sep => "\r\n", :headers => true, :write_headers => true, :return_headers => true) do |csv| 
     csv << ["Course", "Amount", "First Name", "Last Name", "Phone", "Mobile", "Created At"] 
     Purchase.all.each do |p| 
     csv << columns.collect{ |name| p.send(name)} 
     end 
    end 
    end 
end 
+1

就是你实现CSV.generate代码?如果不是那么你确定你想测试它吗?你可以模拟/存根来模拟它的行为,足以测试你使用它编写的代码。 – jaydel

+0

*点头*好点。这不是我的代码,但我很想确保购买物品正在发送给它。 – PlankTon

回答

9

我会写这样:

# helper class to get access to csv_purchase_list 
class Foo 
    include Admin::PurchasesHelper 
end 

it "should return Purchases as csv" do 
    # create some objects - you have to know its values 
    Factory(:purchase) 
    Factory(:purchase) 

    # you have to prepare file.csv with content from objects created above 
    expected_csv = File.read('file.csv') 
    generated_csv = Foo.new.csv_purchase_list 

    # sometimes it is better to parse generated_csv (ie. when you testing other formats like json or xml 
    generated_csv.should == expected_csv 
end 
+0

为什么指定工厂(:购买)2次。请指导 –