2014-01-27 1 views
4

내 Rails 응용 프로그램이 반환하는 CSV 파일의 내용을 테스트 할 수 있어야합니다. 내가 적절한 권한이있는 해당 URL, 다음 CSV 파일이 다운로드를 방문하는 경우capybara와 poltergeist에서 CSV 다운로드를 테스트하려면 어떻게합니까?

respond_to do |format| 
    format.html 
    format.js 
    format.csv do 
    if current_user.has_rights? 
     response.headers['Content-Type'] = 'text/csv' 
     response.headers['Content-Disposition'] = 'attachment; filename=info.csv'  
     send_data generate_csv_file 
    else 
     send_data "Access denied" 
    end 
    end 
end 

는 그리고이 코드는 works-- :처럼 내 컨트롤러에서

는, 코드가 보인다. 그러나 나는 Poltergeist와 Capybara와 함께 일하는 적절한 테스트를받을 수없는 것 같습니다.

난 다음, following the response to this question 할 경우 그 넣 통해보고 있어요

describe DashboardsController do 
    context "when format is csv" do 
    render_views 
    let(:csv_string) { get_csv_headers } 
    let(:csv_options) { {filename: "report.csv", disposition: 'attachment', type: 'text/csv; charset=utf-8; header=present'} } 
    let (:csv_user) {FactoryGirl.create(:csv_user)} 
    before do 
     sign_in csv_user 
    end 


    it "should return a csv attachment" do 
#  @controller.should_receive(:send_data).with("#{csv_string.join(',')}", csv_options). 
#  and_return { @controller.render nothing: true } # to prevent a 'missing template' error 
     get :index, format: :csv 
     puts response.headers 
     puts response.body 
    end 
    end 
end 

헤더 : 분명히 잘못

{"Location"=>"http://test.host/", "Content-Type"=>"text/html; charset=utf-8"} 
<html><body>You are being <a href="http://test.host/">redirected</a>.</body></html> 

합니다. csv 형식에 대한 응답을 테스트 컨텍스트 내에서 csv가되게하려면 어떻게해야합니까? (이미 내가 render_views, as suggested in this question을 포함했음을 유의하십시오.)

답변

2

저는 지금 당장 같은 문제를 겪고 있습니다. 이것은 당신을 도울 수 있습니다. =>http://sponsorpay.github.io/blog/2012/11/29/capybara-poltergeist-and-csv-downloads/

이것은 관련 있습니다. =>Downloading file to specific folder using Capybara and Poltergeist driver

+3

이 웹 사이트의 답변에는 링크 (유효하지 않게되는 경향이 있음)뿐만 아니라 실체가 포함되어야합니다. 링크 만 제공하려면 질문에 대한 주석에서 그렇게해야합니다. – user664833

+1

그리고 그 이유는 링크가 무효화되어 (현재와 같이) 동일한 솔루션을 찾고있는 나와 같은 사람들이 더 이상 해결책을 얻을 수 없기 때문입니다. ( –

관련 문제