Я хочу проверить загрузку файла в рельсах, но не знаю, как это сделать [дублировать]

Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему

130
задан user727403 31 August 2011 в 17:37
поделиться

5 ответов

Я не делал этого с помощью RSpec, но у меня есть тест Test :: Unit, который делает что-то подобное для загрузки фотографии. Я установил загруженный файл в качестве экземпляра ActionDispatch :: Http :: UploadedFile следующим образом:

test "should create photo" do
  setup_file_upload
  assert_difference('Photo.count') do
    post :create, :photo => @photo.attributes
  end
  assert_redirected_to photo_path(assigns(:photo))
end


def setup_file_upload
  test_photo = ActionDispatch::Http::UploadedFile.new({
    :filename => 'test_photo_1.jpg',
    :type => 'image/jpeg',
    :tempfile => File.new("#{Rails.root}/test/fixtures/files/test_photo_1.jpg")
  })
  @photo = Photo.new(
    :title => 'Uploaded photo', 
    :description => 'Uploaded photo description', 
    :filename => test_photo, 
    :public => true)
end

Нечто похожее может работать и на вас.

16
ответ дан Dave Isaacs 26 August 2018 в 19:22
поделиться

Я не уверен, что вы можете протестировать загрузку файлов с помощью RSpec. Вы пробовали Capybara ?

Легко проверить загрузку файлов с помощью метода capybara attach_file из спецификации запроса.

Например (этот код является только демо):

it "can upload a license" do
  visit upload_license_path
  attach_file "uploadLicense", /path/to/file/to/upload
  click_button "Upload License"
end

it "can download an uploaded license" do
  visit license_path
  click_link "Download Uploaded License"
  page.should have_content("Uploaded License")
end
52
ответ дан Ken 26 August 2018 в 19:22
поделиться

Вы можете использовать метод fixture_file_upload для тестирования загрузки файлов: поместите тестовый файл в каталог «{Rails.root} / spec / fixtures / files

before :each do
  @file = fixture_file_upload('files/test_lic.xml', 'text/xml')
end

it "can upload a license" do
  post :uploadLicense, :upload => @file
  response.should be_success
end

In Если вы ожидали файл в виде параметров ['upload'] ['datafile']

it "can upload a license" do
  file = Hash.new
  file['datafile'] = @file
  post :uploadLicense, :upload => file
  response.should be_success
end
276
ответ дан Mauricio Gracia Gutierrez 26 August 2018 в 19:22
поделиться

Мне пришлось добавить оба из них, чтобы заставить его работать:

describe "my test set" do
  include Rack::Test::Methods
  include ActionDispatch::TestProcess
5
ответ дан nfriend21 26 August 2018 в 19:22
поделиться

, если вы включили Rack :: Test *, просто включите методы тестирования

describe "my test set" do
  include Rack::Test::Methods

, затем вы можете использовать метод UploadedFile:

post "/upload/", "file" => Rack::Test::UploadedFile.new("path/to/file.ext", "mime/type")

* ПРИМЕЧАНИЕ. Мой пример основан на Sinatra, который расширяет Rack, но должен работать с Rails, который также использует Rack, TTBOMK

32
ответ дан zedd45 26 August 2018 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: