2013-05-24 10 views
5

Tôi có đoạn code sau trong bộ điều khiển của tôi rằng xuất khẩu một tập tin csvnội dung thử nghiệm của tập tin trong rspec từ respond_to format.csv

... 
    def export 
    @filename = 'users.csv' 
    @output_encoding = 'UTF-8' 
    @users = User.active_users #not the actual scope but this only returns active 
    respond_to do |format| 
     format.csv 
    end 
    end 
... 

Và tôi đã điều sau đây trong spec của tôi

it "should only return active users" 
    get :export, :format => :csv 
    # i want to check that my mocked users_controller#export is only returning the active users and not the inactive ones 
end 

response.body trống trong thử nghiệm này khi tôi kiểm tra. Làm thế nào tôi sẽ đi về nhận được các tập tin csv trong spec được tải xuống khi hành động này được nhấn trong một trình duyệt để tôi có thể kiểm tra kết quả? Tôi đã đánh một bức tường cố gắng tìm ra điều này.

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp.

Trả lời

-1

Bạn định rõ rằng định dạng CSV được hỗ trợ, nhưng không phải nội dung nên là gì. Bạn có thể làm

respond_to do |format| 
    format.csv do 
    render text: File.read(@filename) 
    end 
end 

để thực sự hiển thị tệp CSV đó.

Nếu bạn cũng có một cái nhìn định dạng HTML bình thường đối với cùng một dữ liệu, bạn chỉ cần có

respond_to do |format| 
    format.html 
    format.csv do 
    render text: File.read(@filename) 
    end 
end 

giả sử bạn đã thiết lập thích hợp biến dụ cho chế độ xem HTML trước.

0

Một thử nghiệm để kiểm tra rằng một tập tin CSV được tạo ra như sau, giả định rằng các hành động điều khiển là 'csv_create_path'

it 'should create a CSV file ' do 
    get csv_create_path 
    response.header['Content-Type'].should include 'text/csv' 
end