0

我正在升級我的Rails應用程序以使用Turbolink 5來利用本機包裝。我已經更新了所有javascript,並且所有內容在瀏覽器和Android應用程序中都按預期工作。使用js true時,我遇到了一些水豚測試問題。在撰寫本文時,我正在使用最新的水豚(2.11.0),poltergeist(1.12.0)和phantomjs(2.1)。我也嘗試過水豚-webkit驅動程序,但都沒有成功。Turbolinks 5 /水豚/ Rails

我看起來有問題的地方在於,turbolinks 5中的所有表格都應該通過遠程提交,turbolinks知道如何處理請求。我發現在Capbara中,我的表單在提交後不會重定向,而是保持在同一頁面上。我做了很多谷歌搜索和反覆試驗,並做了一些簡短的介紹。任何幫助將不勝感激。如果需要更多信息,請告訴我。

scenario 'user has dispatch permission and valid attributes', js: true do 
    sign_in('jdoe') 
    page.visit path 
    page.fill_in 'contact_text_input', with: 'Jimmy' 
    page.select 'Medium - 3 Hours', from: 'Priority' 
    page.fill_in 'Created By', with: 'John Doe' 
    page.click_button 'Create This' 
    save_and_open_page 
    expect(page.current_path).to eq("/dispatch") 
    expect(page).to have_content('This was created successfully') 
    end 

    def sign_in(username) 
    page.visit '/' 
    page.fill_in 'Username', with: username 
    page.fill_in 'Password', with: 'test' 
    page.click_button 'Log In' 
    end 
+0

您是否正在使用'js_errors:true'運行Poltergeist以確保您沒有任何JS錯誤或使用不受支持的JS函數/功能(Poltergeist 2.1.1不支持ES2015 - 儘管如此,新的2.5 beta版本) 。另外請注意,在你的JS中使用'let'會在Poltergeist 2.1.1 –

+0

中悄然失敗。另外 - 由於'sign_in'沒有等待登錄完成,我預計你的測試會失敗。這意味着您的測試中的'page.visit路徑'可能會在auth cookie被設置之前調用,因此不會載入您認爲它的頁面。你應該有一些確保登錄已完成的內容,比如'expect(page).to have_text('You have logged in!')'或者頁面上顯示的任何內容以表示登錄成功。 –

+0

比你對所有指針,登錄問題是我所擁有的,所以我一定會嘗試。我試圖安裝phantomjs的測試版,但簽署的問題可能是我正在遇到的 –

回答

0

我有這個問題。我的解決方案是(如托馬斯沃波爾在評論中建議的)在提交登錄表單後添加expect(page).to have_text("Some text from the page you should be redirected to after login")

在我們的例子中,我們有一個log_in_buyer_using_the_form測試幫手,所以我修改了它採取一種說法:log_in_buyer_using_the_form(wait_for_content: item.title)

我在這裏的假設是,我們需要1.等待形式的Ajax提交發生,2。然後根據Ajax響應等待Turbolinks重定向。通過讓測試等待一些內容出現,我們知道它已經過去了。

我還沒試過的東西比較優雅,但理論上應該是這樣的,那就是設置一個事件監聽器,使用page.execute_script循環,直到turbolinks:load之類的事件運行。