0

我有一個默認空白的span元素,當頁面被javascript加載時更新。這很好用 - 不過assert_select似乎只能獲得最初的HTML - 在頁面加載完成之前。這是預期的行爲?我究竟做錯了什麼?在支架Rails 4 - assert_select不能使用javascript更新的元素

跨度元件產生_form.html.erb:

... 
<span id="confirm_loaded"></span> 
... 

----在一個js文件中的應用程序/資產/ Javascript角:

$(function(){ 
    $("#confirm_loaded").html("test"); 
}); 

----當我加載頁面 - 頁面通過JavaScript更新,一切都很好。

然而,在集成測試 - 這條線:

assert_select "span#confirm_loaded", {text: "test"} 

失敗,出現錯誤:

<test> expected but was 
<>.. 
Expected 0 to be >= 1. 

這似乎證實了測試是沒有看到更新的HTML元素的設置javascript(可能是在頁面完全加載之前運行?)

快速更改頁面,刪除javascript和硬編碼HTML:

... 
<span id="confirm_loaded">test</span> 
... 

現在測試通過(assert_select能夠獲得值,我們是金)。

assert_select是否只能得到HTML標籤的初始值?爲什麼在頁面加載時assert_select 而不是獲取由javascript更新的值?

感謝您的幫助。

+0

請注意,爲了縮小這一點 - 我繼續前進,並刪除turbolinks寶石 – Gabriel

回答

1

想一想,有一點可能是命令行測試正在從服務器獲取響應並提供解析/驗證。

這將有兩個重要的方面:

  1. 腳本&客戶端代碼就不會被執行
  2. 上輸入現場 - 測試,提供了瀏覽器界面等框架 - 讓客戶端 - 側代碼得到呈現

似乎是這樣 - 但 - 我會留下問題,以防萬一我失去了一些東西。

6

是的,你說對了你的問題。 assert_select選擇元素並在@response(@ response.body)對象上進行相等性測試。這是從服務器返回的實際響應,因此當時沒有JavaScript代碼執行,因此您可以獲得空白文本。腳本在您的瀏覽器中運行。

+0

我認爲我們只能在js輸出中檢測一些東西,如:assert_equals @item。count,@ response.body.scan('item-id')。count' – askmehow