2012-04-11 8 views
2

RoRアプリケーションでBDDにCucumberとCapybaraを使用しています。imgタグが既存のイメージを指しているかどうかをテストするには?

Then /^I should see some result profiles with avatar$/ do 
    page.should have_css("#profile_search_results .profile img.avatar", :count => some_profiles) 
end 

ページは

<div id="#profile_search_results> 
    <img class="avatar" src="" /> 

が含まれていることをこのステップのチェックをしかし...私はまたかどうかを確認したい:私は、次の機能

Feature: List profiles 
    In order to know that the people behind the profiles are real people 
    As a lurker 
    I want to be able to find who is registed and see their profile picture 

Background: Profiles have been added to the database, some with picture attached 
    Given some profiles exist 
    And I am on the home page 

Scenario: Search by city, avatars should be there 
    When I search for a city with profiles 
    Then I should see some result profiles with avatar 

基礎となるカピバラは、ファイルが含まれている手順に持っています画像が存在する(壊れた画像ではない)。

私のカピバラのステップでこれを行うにはどうすればよいですか?

答えて

2

チェックする方法は、セレンまたは任意の他のドライバを使用せずに、img要素(感謝MrDanA)からsrc属性を抽出し、そのURLを訪問した後、ステータスコードをチェックすることでした:

page.should have_css("#profile_search_results .profile img.avatar", :count => some_profiles) 
img = page.first(:css, "#profile_search_results .profile img.avatar") 
visit img[:src] 
page.status_code.should be 200 
1

あなたは、それがsrc属性(例えばsrc = element[:src])のget、問題のimgタグを見つけるために、カピバラのファインダーメソッドを使用することができます。次にRubyを使用して、それが存在するかどうかを調べることができます。したがって、すべてのすべてで、それはこのようになります:

element = page.first(:css, "...") 
src = element[:src] 
assert File.exists?("#{Rails.root}/#{src}") 

を私はFile.exists?に与えられたパスが正しいことを確認するために、これを試していません。しかし、テストで最初にそれを印刷すると、それがどのように見えるか、それをちょっと調べる必要があるかどうかがわかります。

+0

'img src'を作成したら、RestClientのようなものを要求し、ファイルシステムの場所を調べるのではなく、200のステータスコードと非ゼロのボディを確認する方が信頼できる可能性があります。 –

+0

MrDanAとJon Mの答えはどちらも正しい方向を指しています。私は正解を...コメントの代わりに投稿しました。ありがとう。 – Cesar

+0

あなたはそれがうまくいってうれしいです! – MrDanA

0

Firefoxでテストが実行されていると仮定すると、画像のnaturalWidthプロパティを確認できます。 0の場合、画像は破損します。

if find('img.avatar')[:naturalWidth] == 0 
    raise('image broken') 
end 
+0

私はあなたの解決策を使用したときに '未定義のメソッド 'find' for ...'を取得しました。宝石を「必要とする」/「輸入する」必要がありますか? –

+0

@ OneTwoThree、このソリューションは、あなたがCapybaraを使用していることを前提としています。どのように設定したかによって、 'page.find'を試す必要があります。 –

関連する問題