2016-08-28 206 views
0

在我的Rails應用程序中,我製作了一個AJAX PUT請求(使用Coffeescript),該請求在我的開發環境中正常工作。當我檢查按鈕,點擊後,會觸發使用Firefox的AJAX請求時,它看起來是這樣的:爲什麼我的AJAX在運行測試時請求dev中的PUT請求,但請求了GET請求?

return $.ajax({ 
    url: url, 
    type: 'PUT', 
    data: { 
     minutes: minutes, 
     appt_id: appt_id 
    } 
}); 

然而,當我運行一個集成測試點擊相同的按鈕,我檢查在Firefox按鈕(我停在中間使用byebug測試),AJAX請求是這樣的:

return $.get(url, { 
    minutes: minutes, 
    appt_id: appt_id 
    }); 

我只是使用GET使用PUT(當我手動測試它,它的工作原理)改變了要求,並測試通過時它使用GET,但在更改爲使用PUT後,測試失敗,出現以下錯誤:

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

      ActionController::RoutingError: 
      No route matches [GET] "/appointments/9998/put_away" 

爲什麼測試環境中的AJAX請求從PUT更改爲GET請求,以及如何解決此問題以便我的測試通過?謝謝!

我使用Rails 4.2.0,Ruby 2.2.4p230和RSpec 3.4.4,以及Selenium和Capybara進行測試。

+0

你的代碼是如何改變的?第一個示例代碼與第二個代碼不同!你也可以發佈網絡標籤請求和響應? – dm03514

+0

@ dm03514我使用'$ .ajax替換了'$ .get(url,{分鐘:分鐘,appt_id:appt_id})'',''PUT', data:{minutes:minutes, appt_id:appt_id} })'並將我的路由從'get'send_more_minutes_message''改爲'put'send_more_minutes_message''。 – jackerman09

+0

您是否預先編譯過測試環境中的資產?如果是這樣,它有時可以阻止檢測JS的變化,所以它繼續使用舊版本 –

回答

1

如果您預編譯了您的資產,您可能在公共/資產中包含清單文件 - 可能是.sprockets-manifest * .json。該文件的存在可以防止測試環境檢測到資產的變化,因此不會在測試中提供最新的JS。刪除清單文件應該在下次運行測試時強制更改被識別並提供。