3

ユーザーのプロフィール写真への画像のアップロードに Carrierwave と Minimagick を使用しています。アップローダを作成してマウントする方法については、 Carrierwave の readmeの指示に従いました。Rspec と Capybara でテストしています。

ここに私のuser_profile_spec.rb、関連する行があります:

feature 'Visitor views profile page' do
    before(:each) do
        @user = sign_in
        click_link "Profile"
    end

    scenario 'can upload a photo' do
        attach_file 'photo', File.join(Rails.root, 'public', 'images', 'default.png')
        click_button "Update Profile"
        expect(page).to have_content "default.png" 
    end

ユーザー プロファイル編集ページの _form.html.erb は次のとおりです。

<%= form_for @profile, url: @profile, :html => {:multipart => true} do |f| %>

    <strong>Photo:</strong>
      <%= image_tag @profile.photo.display if @profile.photo? %>
    </p>

    <div class="field">
      <%= f.label :photo %>
      <%= f.file_field :photo %>
    ....
<% end %>

そして私のエラー:

  1) Visitor views profile page can upload a photo
 Failure/Error: attach_file 'photo', File.join(Rails.root, 'public', 'images', 'default.png')
 Capybara::ElementNotFound:
   Unable to find file field "photo"
 # ./spec/features/profiles/user_profile_spec.rb:35:in `block (2 levels) in <top (required)>'

:photo写真が既にアップロードされている私のFactorygirlプロファイルモデルを使用して、添付ファイルを変更し、attach_file部分をに変更しようとしました:

FactoryGirl.define do
    factory :profile do
    website 'http://www.validwebsite.com'
    country 'Valid country'
    about 'Valid about statements that go on and on'
    profession 'Validprofession'
    age 22
    user
    photo { Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec', 'support', 'profile_photos', 'default.png')) }

終了 終了

エラーを整理できませんでした。キャリアウェーブの不具合ですか?

これが私の photo_uploader.rb です。必要ではないと思いますが、念のため、すべての情報を示します。

class PhotoUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  storage :file
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def default_url
    ActionController::Base.helpers.asset_path("images/" + [version_name,     "default.png"].compact.join('_'))

    "/images/" + [version_name, "default.png"].compact.join('_')
  end

  version :display do
    process :resize_to_fill => [150, 150]
  end

  version :thumb do
    process :resize_to_fill => [50, 50]
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end

end

編集:仕様に関するいくつかの新しい情報を追加しました。

4

1 に答える 1

2

現在の仕様では、attach_fileは「写真」に一致する ID、名前、またはラベルを探していますが、これは明らかに持っていません。代わりに、これらのいずれかが機能するはずです。

attach_file 'profile[photo]', File.join(Rails.root, 'public', 'images', 'default.png') # name
attach_file 'profile_photo', File.join(Rails.root, 'public', 'images', 'default.png') # id
attach_file 'Photo', File.join(Rails.root, 'public', 'images', 'default.png') # label
于 2013-09-03T13:03:35.570 に答える