2010-10-19 32 views
11

Tôi đang cố gắng viết thông số kỹ thuật cho chức năng tải lên tệp đang hoạt động bằng cách sử dụng attachment_fu. Tuy nhiên, mã mẫu do tác giả đưa ra để thử nghiệm yêu cầu tôi yêu cầu action_controller/test_process để tôi có quyền truy cập vào lớp ActionController::UploadedStringIO. Tôi đã sử dụng này trước khi trong đường ray 2.x nhưng đối với đường ray 3, nó không thể xác định vị trí các tập tin test_process.testing_fu testing in rails 3

Làm cách nào để tiếp tục thử nghiệm chức năng tải lên tệp trong đường ray 3?

Trả lời

23

Tôi đã có thể sử dụng fixture_file_upload tốt với Rails3 và rspec.

Tôi chỉ cần thêm include ActionDispatch::TestProcess đến spec_helper.rb, và sau đó thông qua một cái gì đó giống như sau khi fileData:

fixture_file_upload(Rails.root.join("spec/support/test.png"), 'image/png') 

EDIT: Một cái gì đó tôi nâng cấp thay đổi hành vi của này để luôn luôn bao gồm đường dẫn cố định, vì vậy Tôi đã chuyển sang mục này thay vì fixture_file_upload:

Rack::Test::UploadedFile.new(Rails.root.join("spec/support/test.png"), 'image/png') 
+1

+1 cho nhận xét cuối cùng về cách sử dụng 'Rack :: Test :: UploadedFile.new'! với 'bao gồm ActionDispatch :: TestProcess' tôi bằng cách nào đó nhận được hành vi kỳ lạ với cô gái nhà máy ... – gingerlime

4

Tôi đang thử nghiệm các tệp tải lên trong đường ray 3 ngay bây giờ, mặc dù tôi không biết câu trả lời của tôi hữu ích như thế nào. Bạn có thể thay đổi thử nghiệm không? Cá nhân, tôi đang sử dụng phương pháp Cucumber/Capybara. Cáp của Capybara xác định

attach_file('Image', '/path/to/image.jpg') 

Cá nhân đây có vẻ là cách tốt hơn để thử nghiệm hơn là tương tác với đối tượng StringIO ... cảm thấy tự do để phản hồi lại.

3

Đây là một chút khó khăn để tìm cho Rails 3

Bạn vẫn có thể sử dụng chức năng fixture_file_upload, nhưng bạn phải thêm:

include ActionDispatch::TestProcess

Để test của bạn.

Điều này hoàn toàn không hiệu quả với Rspec. Tôi chỉ phải lấy tập tin và đăng trực tiếp tập tin đó.