我在嘗試使用Capybara的attach_file方法測試圖片上傳是否適用於回形針時遇到問題。在使用Capybara attach_file方法測試上傳文件時遇到問題
rspec的返回這些錯誤如下: 失敗:
1) Upload Background Image cannot upload a background image
Failure/Error: page.attach_file('#artist_background_image', Rails.root + 'spec/Fixtures/Snow.jpg')
Capybara::ElementNotFound:
Unable to find file field "#artist_background_image"
# ./spec/models/artist_spec.rb:65:in `block (2 levels) in <top (required)>'
我的測試如下所示。我假定選擇文件按鈕是attach_file的選擇器,所以我使用了選擇器'#artist_background_page'的id。
describe 'Upload Background Image', js: true do
before :each do
p '================='
pp Artist.all
@artist = Artist.first || Artist.create(artist_name:'Double Stuff Oreos', email:'[email protected]', password:'letmein')
visit "/artists/" + @artist.id.to_s
pp @artist.id
pp @artist.artist_name
p @artist.errors.full_messages
click_button 'Log in'
fill_in 'Email', with: '[email protected]'
fill_in 'Password', with: 'letmein'
page.find('#loginButtonModal').click
page.find('#addBackgroundImagePrompt').click
page.attach_file('#artist_background_image', Rails.root + 'spec/Fixtures/Snow.jpg')
p Rails.root + 'spec/Fixtures/Snow.jpg'
click_button 'upload'
end
it "cannot upload a background image", js: true do
backgroundURL = @artist.background_image.url.include?('Snow.jpg')
p @artist.background_image.url
expect(backgroundURL).to be_truthy
end
end
但是,當我將選擇器更改爲'artist_background_page'而沒有ID'#'符號時。 rspec的給了我不同的錯誤:
...."================="
[]
"is_active_session is called"
#<Artist id: 1, artist_name: "Double Stuff Oreos", route_name: "double-stuff-oreos", created_at: "2014-07-20 17:20:48", updated_at: "2014-07-20 17:20:48", password_digest: "$2a$04$vgozdgieklXPjJ9Ri4Cv1e1d/hme0ybNnSEGXrmob5z...", remember_token: nil, email: "[email protected]", description: nil, youtube: nil, twitter: nil, facebook: nil, instagram: nil, hometown: nil, confirmation_code: nil, is_confirmed: nil, background_image_file_name: nil, background_image_content_type: nil, background_image_file_size: nil, background_image_updated_at: nil>
1
"Double Stuff Oreos"
[]
"is_active_session is called"
#<Pathname:/Users/bob/rails_projects/audience/spec/Fixtures/Snow.jpg>
"/background_images/original/missing.png"
"Hello from update"
"Logged in!"
An error occurred in an after hook
ActiveRecord::RecordNotFound: Couldn't find Artist with 'id'=1
occurred at /Users/shuo/.rvm/gems/ruby-2.1.2/gems/activerecord- 4.1.4/lib/active_record/relation/finder_methods.rb:320:in `raise_record_not_found_exception!'
F....
Failures:
1) Upload Background Image cannot upload a background image
Failure/Error: expect(backgroundURL).to be_truthy
expected: truthy value
got: false
# ./spec/models/artist_spec.rb:74:in `block (2 levels) in <top (required)>'
在這種情況下,模型的創建,但錯誤說,它不能找到它出於某種原因... 有沒有我可以使用在水豚附加文件的任何其他方法並測試成功上傳?
可能性失敗:
- 錯誤路徑文件上傳
- 使用錯誤的方法或無效的使用方法
- 有毛病服務器