2016-11-28 16 views
1

使用水豚與Poltergeist點擊具有data-method='delete'屬性的鏈接。水豚與Poltergeist - 與數據方法的鏈接:刪除或:修補程序不觸發

水豚移動就好像鏈接被成功點擊一樣,但沒有實際的請求命中服務器。

測試日誌顯示導向顯示頁面的所有步驟...但沒有請求適當的鏈接。

它發現沒有問題的正確鏈接,並認爲它被點擊了。

我應該指出這不是一個:遠程鏈接,它在發展

任何想法的作品?

下面的代碼:

scenario "deletes a document", js: true do 
    set_auto_accept_for_alert_and_confirm_dialogs 
    sign_in_admin admin 
    visit admin_dashboard_path 
    find(:css, '#mediaDropdown').trigger('click') 
    find(:css, '#documents_link').click 
    find(:css, "#delete_link_#{document.id}").click 
    expect(current_path).to eq admin_documents_path 
    expect(Document.all.size).to eq 0 
    expect(page).to have_content(I18n.t('notices.admin.documents.destroy.success')) 
end 

我已經延長了等待時間,增加了一個長時間的睡眠&使用byebug立即「刪除」鏈接&試圖調用它在控制檯前。


水豚(2.10.1) - 鬼驅人(1.11.0) - 鐵軌(4.2.7.1) - jQuery的導軌(4.2.1) - turbolinks(5.0.1)

+0

你點擊鏈接後立即在測試中做什麼?顯示你的測試代碼。此外,測試模式會連接JS資產,這意味着錯誤可能會阻止後期資產運行,因此請確保在加載頁面時,在開發模式下控制檯中不顯示任何JS錯誤。 –

+0

感謝您的快速回復。我已經添加了測試。在開發或生產模式中沒有Javascript錯誤。 – Bob

+0

已經在其上發生了delete_link的url已經是admin_documents_path了嗎?如果是這樣,那麼我假設你的測試在Document.all.size上失敗了?你的測試在編寫方式上有幾個問題。首先 - 不要使用current_path和eq來斷言 - 而是使用'expect(page).to have_current_path(admin_documents_path)'。其次 - 你需要交換最後兩個期望的順序。您不知道文檔被刪除,直到顯示消息,因此在驗證計數之前先檢查該文檔(Document.all.size不會等待,因此您需要知道在計數之前它已被刪除) –

回答

1

我打開調試:

Capybara.register_driver :poltergeist do |app| 
    Capybara::Poltergeist::Driver.new(app, { js_errors: true, debug: true }) 
end 

這引發了javascript錯誤Can't find variable: $ - 所以jQuery沒有被加載。

我檢查了測試日誌,看是否正在調用JavaScript文件 - 這是。

我更改了JavaScript文件以更改頁面上的一些文本 - 但沒有任何發生。所以這個問題似乎與資產管道有關。

最後,問題是因爲在public\assets文件夾中創建了一個.sprokets-manifest文件,否則該文件夾爲空。

我從來沒有預編譯這個應用程序的資產,所以我不知道清單文件來自哪裏。

刪除.sprokets-manifest文件是一個簡單的修復。

相關問題