2016-03-14 37 views
1

我有一個Rails應用程序,我最近重構標準的閃存[:成功]消息使用閃光燈[:吐司]:測試土豚特徵規格中烤麪包的味道?

<% flash.each do |type, message| %> 
    <% if type == "success" %> 
    <div class="alert alert-success alert-dismissable" role="alert"> 
     ... 
    </div> 
    <% elsif type == "toast" %> 
    <script> 
     $(function() { 
     Materialize.toast('<%= message %>', 3000); 
     }); 
    </script> 
    <% else %> 
    <div class="alert alert-danger alert-dismissible" role="alert"> 
     ... 
    </div> 
    <% end %> 
<% end %> 
,使用 http://materializecss.com/dialogs.html

這裏的,我跟我的閃光燈部分做什麼

這很有效,尤其是在移動設備和複雜的數據頁面,我將用戶發送回頁面中間,並且頁面頂部的標準Flash成功消息不可見。

我可以很容易地測試在控制器測試中flash [:toast]是否爲零,但在水豚功能測試中,我沒有訪問權限,我也不能使用我曾經使用過的標準代碼用它來測試閃光燈[:成功],如:

expect(page).to have_content("Your email address has been updated successfully.") 
expect(page).to have_css(".alert-success") 

現在我訴諸只是測試該警報的危險不存在,如:

expect(page).to_not have_css(".alert-danger") 

這工作,但不是真的測試烤麪包。有沒有什麼辦法來檢查JavaScript解僱或在網頁上出現了3秒的敬酒?

回答

3

只要您使用的是JS能夠驅動(相當多的東西,但默認的機架測試驅動程序),然後

expect(page).to have_content("The message shown by the toast") 

應該找到敬酒時,它會顯示在頁面上。如果要檢查它出現3秒內消失,你可以做類似

expect(page).to have_content("The message shown by the toast") 
expect(page).not_to have_content("The message shown by the toast", wait: 3) 

第一條語句應該等待的文字出現,第二個將等待3秒它消失。如果你想真正驗證文本顯示在吐司容器中,那麼你可以做

expect(page).to have_css("#toast-container", text: "The message shown") #update css selector to whatever container you are displaying the toast in 
expect(page).not_to have_css("#toast-container", text: "The message shown", wait: 3)