Pracuję nad aplikacją rails 3.2, z której użytkownicy mogą pobierać pliki pdf. Bardzo lubię rozwój oparty na testach, używając narzędzi rspec i shoulda, ale nie mam z tym nic wspólnego.Testowe pobieranie pdf z rspec i pdfkit
Mam następujący kod w moim kontrolera:
def show_as_pdf
@client = Client.find(params[:client_id])
@invoice = @client.invoices.find(params[:id])
PDFKit.configure do |config|
config.default_options = {
:footer_font_size => "6",
:encoding => "UTF-8",
:margin_top=>"1in",
:margin_right=>"1in",
:margin_bottom=>"1in",
:margin_left=>"1in"
}
end
pdf = PDFKit.new(render_to_string "invoices/pdf", layout: false)
invoice_stylesheet_path = File.expand_path(File.dirname(__FILE__) + "/../assets/stylesheets/pdfs/invoices.css.scss")
bootstrap_path = File.expand_path(File.dirname(__FILE__) + "../../../vendor/assets/stylesheets/bootstrap.min.css")
pdf.stylesheets << invoice_stylesheet_path
pdf.stylesheets << bootstrap_path
send_data pdf.to_pdf, filename: "#{@invoice.created_at.strftime("%Y-%m-%d")}_#{@client.name.gsub(" ", "_")}_#{@client.company.gsub(" ", "_")}_#{@invoice.number.gsub(" ", "_")}", type: "application/pdf"
return true
end
Jest to dość prosty kod, wszystko co robi to konfiguracja mojego PDFKit i pobierz wygenerowany pdf. Teraz chcę przetestować całość, w tym:
- Przypisanie zmiennych instancji (łatwe, oczywiście, i że działa)
- wysyłanie danych, czyli świadczenie pdf => I to jest gdzie utknąłem
próbowałem następujące:
controller.should_receive(:send_data)
ale to daje mi
Failure/Error: controller.should_receive(:send_data)
(#<InvoicesController:0x007fd96fa3e580>).send_data(any args)
expected: 1 time
received: 0 times
Czy ktoś wie o sposobie sprawdzenia, czy plik PDF jest faktycznie pobrany/wysłany? Co więcej, jak widzisz, powinno być przetestowane pod kątem dobrego pokrycia testowego? Np. Testowanie typu danych, tj. Aplikacji/pdf, byłoby miłe.
Dzięki!
dzięki, ale niestety, że daje mi niezdefiniowana metoda '„response_headers'' - jaka jestem Robię źle? – weltschmerz
Haha, zapomniałem 'dostać: show_as_pdf' :) To rozwiązuje wszystkie problemy. Wielkie dzięki! – weltschmerz
Chciałbym przetestować zawartość pobierania, ale z selenem, który wydaje się nie działać, ktoś wie o tym więcej? –