更新:燒了太多小時後,決定選擇簡單的方法,並使用機架測試。這可以直接使用,並至少驗證內容類型是pdf。執行過期軌道功能規格測試下載使用水豚/硒/火狐
scenario 'document can be downloaded' do
visit my_documents_path
click_on 'Download'
expect(page.response_headers['Content-Type']).to eq "application/pdf"
end
我想寫一個功能規格來測試我下載的PDF中的內容,我也跟着在這裏找到了方向:https://stackoverflow.com/a/29544674/2464546
我運行的Ruby 2.3的Rails 4.2。 5.2,RSpec 3.4,水豚2.7。
在從上面的SO鏈接的代碼中,有一條線,據稱抑制火狐保存彈出,這一點,調整到pdf
從csv
:
# Suppress "open with" dialog
profile['browser.helperApps.neverAsk.saveToDisk'] = 'application/pdf'
這似乎並沒有因爲對話框工作盒子仍然彈出,然後我的測試出錯。
我的功能規格:
scenario 'document can be downloaded', js: true do
visit my_documents_path
click_on 'Download'
expect(DownloadHelpers::download_content).to have_content('Thingy')
end
我每次運行這個規範,它錯誤說出來,每次execution expired
有不同的錯誤。例如,最近的一次了下列文件:
1) My documents home page document can be downloaded
Failure/Error: Dir[PATH.join("*")]
Timeout::Error:
execution expired
# ./spec/features/shared/download_helper.rb:8:in `downloads'
# ./spec/features/shared/download_helper.rb:31:in `downloading?'
# ./spec/features/shared/download_helper.rb:27:in `downloaded?'
# ./spec/features/shared/download_helper.rb:22:in `block in wait_for_download'
# ./spec/features/shared/download_helper.rb:21:in `wait_for_download'
# ./spec/features/shared/download_helper.rb:16:in `download_content'
# ./spec/features/my_documents/index_spec.rb:42:in `block (2 levels) in <top (required)>'
在DownloadHelpers
模塊,我已經從0.1改變了sleep
1〜3,偶爾我會得到下面的錯誤,與睡眠數改變w^/無論我將它設置爲:
Failure/Error: sleep 3 until downloaded?
Timeout::Error:
execution expired
# ./spec/features/shared/download_helper.rb:22:in `sleep'
# ./spec/features/shared/download_helper.rb:22:in `block in wait_for_download'
# ./spec/features/shared/download_helper.rb:21:in `wait_for_download'
# ./spec/features/shared/download_helper.rb:16:in `download_content'
# ./spec/features/my_documents/index_spec.rb:42:in `block (2 levels) in <top (required)>'
我也與上述失敗的結果沒有變化改變了TIMEOUT
計數。最終,對話框仍然彈出並且不會消失/看起來不像它下載文件。
我的下載按鈕後面的控制器:
def download
pdf = @document.pdf_file_name
send_file pdf
end
創建的文件並不大,因爲所有它是一個名字和幾行,所以我不懷疑它會需要比更幾秒鐘下載並讀取文件。
爲什麼執行過期?如何獲得水豚/特徵規格下載文件,以便我的期望通過?
該視圖document.haml
使用角度壽我不認爲這很重要。
%li.col-xs-6
%li.col-xs-6= link_to 'Download', download_document_path(id: document.id), "ng-click" => "logAnalytics('#{document.document_template_id}', 'download')"
另外,我的功能規格有require 'rails_helper'
在頂部,而我rails_helper具有從SO後的代碼(完全,W /相關位):
require 'features/shared/download_helper'
RSpec.configure do |config|
Capybara.register_driver :selenium do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = DownloadHelpers::PATH.to_s
profile['browser.download.folderList'] = 2
profile['browser.helperApps.neverAsk.saveToDisk'] = 'application/pdf'
Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile)
end
config.before(:each) do
DownloadHelpers::clear_downloads
end
end
不幸的是,他們都給我一個錯誤,說它不是一個提醒。 'Selenium :: WebDriver :: Error :: NoSuchAlertError: No alert is present' –
好吧,那麼你可以發佈你的視圖代碼? –
我將更新帖子w /視圖代碼 –