2011-01-15 33 views
27

Làm cách nào để kiểm tra hành động của trình điều khiển gửi tệp?Kiểm tra send_file RSpec

Nếu tôi làm điều đó với thử nghiệm controller.should_receive(:send_file) không thành công với "Thiếu mẫu" vì không có gì được hiển thị.

Trả lời

34

Từ Googlingaround, có vẻ như render cũng sẽ được gọi tại một số điểm .. nhưng không có mẫu, sẽ gây ra lỗi.

Các giải pháp có vẻ là để còn sơ khai nó ra cũng như:

controller.stub!(:render)
+0

Nice, tại sao tôi không nghĩ về điều đó :) – Mirko

+1

Đối với bất kỳ ai xem điều này bằng cách sử dụng các phiên bản RSpec mới hơn, 'stub!' Đã không được chấp nhận. Chỉ cần sử dụng 'stub' –

+3

Và trong Rspec 3, nó là' allow (controller) .to nhận (: render) ' – mehulkar

24

Một cách khác mà làm việc là:

controller.should_receive(:send_file).and_return{controller.render :nothing => true} 

Đối với tôi, điều này nắm bắt được thực tế là các tác dụng phụ đích của send_file là sắp xếp không có gì khác được hiển thị. (Mặc dù, nó phải thừa nhận là có vẻ hơi rung rinh để có cuống gọi một phương thức trên đối tượng ban đầu.)

+0

Rails 4, RSpec 3:' 'and_return {value}' không được chấp nhận. Sử dụng 'and_return (value)' hoặc một khối triển khai mà không cần 'and_return' thay thế. –

6

Bạn cũng có thể làm điều này:

result = get .... 

result.body.should eq IO.binread(path_to_file) 
Các vấn đề liên quan