2017-07-07 6 views
1

私は次のテストを作るしようとしている:チェック)

it 'remove item from cart' do 
    visit cart_path 
    button = page.find("a[href='/carts/#{item.id}/remove']") 
    card = find_ancestor_with_class(button, '.card') 
    button.click 
    # check if card has been removed from page 
end 

次JSが削除されるため、このテストは仕事にsuppossedされますページからカード:.card HTMLページから削除されている場合、私は確認する方法

$.ajax({ 
    url: link, 
    method: "GET", 
    success: function() { 
    $('#alert-modal').modal('show'); 
    $(button).closest(".card").remove(); 
    } 
}); 

?何かがページに表示されていない場合は、だから、全体的に、それはすべての場合にのみ動作します

visit cart_path 
click_link(href: "/cars/#{item.id}/remove")  
expect(page).not_to have_css(".card") 

なり

expect(page).to have_no_css(".card") 

または

expect(page).not_to have_css(".card") 

を行うだろう確認するには

答えて

0

.card要素が削除されます。ページに他の.card要素がまだ残っている場合は、カード内にあると思われるテキストや、カードの要素(IDなど)の他の属性/プロパティ(アイテムの説明やそのように表示されるものなど)をチェックします

expect(page).not_to have_css(".card", text: item.description) 

あなたは.card要素たくさん扱う場合も

Capybara.add_selector :card do 
    xpath do |content| 
    xp = XPath.css('.card') 
    xp = xp[XPath.string.n.is(content)] unless content.nil? 
    xp 
    end 
end 

どのような「カード」などのCSSの定義をローカライズ、読み物事を簡単にするために、カスタムカピバラセレクタを書くことができます許可する必要があります

expect(page).to have_no_selector(:card) 
expect(page).to have_no_selector(:card, item.description) 

など

+0

「カード」を使用して確認する方法はありませんか? –

+0

@RodrigoChaves実際には、 'card'の正確な位置によっては、要素が削除されたときに' card'が実際に新しい要素を指し示すかもしれません - https://gist.github.com/ twalpole/ac5c893a6f1f27ba3005908421d3e45d - 'card'は、要素が削除されたときにページ上の3つの' .card'要素すべてを指しています。これは、動的ページリフレッシュ/リロードを扱うCapybaras自動リロードのためです。テストでは、特定の要素について心配するのではなく、ユーザーがページに表示する内容に重点を置くべきです。 –