2017-12-23 23 views
1

私はRspec、Capybara、およびCucumberを使用して自分のサイトの機能をテストしています。本質的に、私はファッションの電子商取引サイトを持っています。私はすべてのアイテムを表示するショップページを持っています。特定のアイテムをクリックすると、そのアイテムの詳細ページに移動し、セーターと言うことができます。このセーターでは、買い物客として、あなたが望むサイズと色を選択するオプションがあります。最後のオプションは、選択したサイズと色の数量です。しかし、買い物客が異なるサイズや色を選択した場合、AJAX呼び出しを呼び出して合計利用可能数量を更新するJSコードがあります。したがって、小さい青いセーターで始まり、サイズを中に変更すると、AJAXコールは利用可能な中程度の青いセーターを検索します。その後Rails Cucumberカピバラを使用したAJAXのテスト

# first create the items for the test db: 
Given /^there are four total items and three unique item names$/ do 
    create(:product, size: 'M', color: 'Black') 
    create(:product, size: 'M', color: 'Black') 
    create(:product, size: 'S', color: 'Black') 
    create(:product, size: 'S', color: 'White') 
    create(:product, size: 'S', color: 'White', available: false) 
    create(:product, name: 'Alicia Dress', size: 'L', color: 'black', order: 3) 
    create(:product, name: 'Cleopatra Dress', size: 'L', color: 'blue', order: 2) 
end 

は、私は私のキュウリテスト(起動オプションが小さい注意を持っている:10利用可能であるのであれば、その量のための選択オプションは今、次の私は、この機能をテストするために、1から10まで行きますそして、のみ1の量を持っていますが、あなたはMにサイズオプションを変更するときに、2つのMの黒のコートがあるので、それは)2に行くべきか、黒:

Scenario: If a shopper selects a different size or color 
    Given the shopper is on the "shop" page 
    When the shopper clicks on "Master Coat" 
    And the shopper selects a size "M" 
    Then the total quantity should change to "2" 

そして、私のテスト手順:

When /^the shopper selects a size "(.+)"$/ do |size| 
    find('.select-size').find(:option, size).click 
end 

Then /^the total quantity should change to "(.+)"$/ do |quantity| 
    expect(page).to have_css('option', :text => quantity) 
end 

私がそれらの仕事を知っているので、私はGivenとWhenのステップを省いたことに注意してください。私の主な問題は、「買い物客がサイズMを選択した後」で、AjAXコールは発射して数量を変更するはずですが、最後のステップでは数量は1のままで、2私が手動でテストするときに行います。私の推測では、AJAXは最後のテストステップの後に発射または発砲していないので、テストが結果をチェックする前に終了していないということです。

これを正しく設定していますか?もしそうなら、どうすればAJAXレスポンスのマッチャーテストを行うことができますか?私はいくつかのことを試みたが、うまくいかなかった。

+0

使用しているウェブドライバは何ですか?それはセレンですか? – Shani

+0

ウェブドライバは、セレンです。 – Darkisa

答えて

2

私は通常、Ajax呼び出しをテストするために@javascriptタグを使用してセレンドライバを使用します。あなたの機能/サポート/ capybara.rb

Capybara.default_driver = :selenium 

または多分あなたは.select_optionはなく.clickでオプションを選択してみてくださいシナリオ

@javascript 
Scenario: If a shopper selects a different size or color 
Given the shopper is on the "shop" page 
    When the shopper clicks on "Master Coat" 
    And the shopper selects a size "M" 
    Then the total quantity should change to "2" 
+0

これは私を解決に導いた。私はカピバラが使用していたドライバがjをサポートしていないrack_testであることを発見しました。一度他のドライバを登録すると、うまくいきました。助けてくれてありがとう – Darkisa

0

上記@javascriptタグを試してみてください。

When /^the shopper selects a size "(.+)"$/ do |size| 
    find('.select-size').find(:option, size).select_option 
end 

How to select option in drop down using Capybara

+0

私はselect_optionを使い始めましたが、トラブルシューティングからクリックするようになりました。 Shaniの助言に基づいて、私はそれが私のコードで持っていたものではないドライバの問題であることがわかった。応答していただきありがとうございます。 – Darkisa

関連する問題