2017-07-19 114 views
1

我在我的應用程序中使用數據表,並且記錄由ajax加載到表中。現在我正在爲我的數據表的頁面編寫測試,並且必須等待直到記錄被加載。我配置了capybara webkit,並在我的測試中放入了js:true。但是當我運行測試我得到這個錯誤水豚webkit忽略ActionController :: RoutingError

Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" 

ActionController::RoutingError: 
     No route matches [GET] "/images/sort_both.png" 

在我的瀏覽器我檢查了控制檯,我沒有得到這個錯誤,所有圖像都發現。

這是我的WebKit的配置

Capybara.javascript_driver = :webkit 

Capybara::Webkit.configure do |config| 
    config.raise_javascript_errors = false 
end 

我使用wait_for_ajax方法

def wait_for_ajax 
    Timeout.timeout(Capybara.default_max_wait_time) do 
    loop do 
     active = page.evaluate_script('jQuery.active') 
     break if active == 0 
    end 
    end 
end 

,這是我的測試

scenario 'check pending contributions', js: true do 
    login_as analyst, scope: :analyst 

    visit '/analyst/contributions' 

    wait_for_ajax 
    expect(page).to have_content "#{contribution.user_name}" 
    end 

,現在我想解決這個路由錯誤,或者只是忽略它,因爲我只是想測試邏輯,而不是js錯誤。

回答

0

該錯誤不是JS錯誤,這是您的服務器在請求資產時引發的錯誤。您可以通過設置Capybara.raise_server_errors = false來告訴您的測試忽略錯誤,但更好的解決方案是修復您的資產管道,以便在測試環境中正確提供所有資產。可能性是,您之前已經在測試環境中預編譯了資產,並且剩餘的清單文件正在阻止其重新編譯新添加的資產。您可以通過運行這樣

RAILS_ENV=test rake assets:clobber 

此外,假設#{contribution.user_name}文本正在通過Ajax調用加載沒有必要爲wait_for_ajax方法調用,因爲have_content將已經等待/重試修復。

+0

感謝您的答案,它解決了我的問題的ActionController :: RoutingError,但我的測試它不工作。我的表沒有被填充/ capybara沒有在測試中等待,所以它沒有找到「#{contribution.user_name}」。但是,謝謝你的精確答案。 –

+0

@MatheusMendes你的測試不工作是一個不同的問題,你可以嘗試增加'Capybara.default_max_wait_time',以防止響應時間太長。更可能的是你沒有創建要在測試中返回的記錄(或者通過不做或者通過使用'let'來懶洋洋地創建'貢獻',所以當你得到ajax結果時它實際上不在數據庫中),或者您尚未禁用事務性測試並設置database_cleaner,因此記錄在測試和應用程序線程中都可用。然而,這真的是一個單獨的問題,從這一個 –

+0

感謝您的迴應@ thomas,我測試,記錄是使用pry創建的,我使用let!它在開始時創建記錄。我所有的其他測試都在工作,所以我認爲我的事務性測試database_cleaner是可以的。將更多的細節發佈另一個問題,謝謝。 –

相關問題