2012-01-04 6 views
0

ファイルの特定の文字列をチェックするキュウリのシナリオがあります。物事を行うのに理想的な方法ではありませんが、絶対的な必要とみなされています。キュウリのシナリオルビーを使ってファイルを検索する

テーブルを持っている私のキュウリのシナリオ:

と電子メールが

|search_string| 
|Nokogiri  | 
|Cucumber  | 
|White Tiger | 

マイステップ定義

Given /^the email should have$/ do |table| 
    table.hashes.each do |hash| 
    check_email(hash["search_string"]) 
    end 
end 

マイcheck_email方法

を持つべきです
require 'nokogiri' 

def check_email(search_string) 
    htmlFile = File.open(filename).read 
    doc = Nokogiri::HTML::DocumentFragment.parse(htmlFile) 
    if (doc.content["#{search_string}"]) 
    puts true 
    return true 
    end 
    htmlFile.close 
    puts false 
    return false 
end 

「.txt」というファイル拡張子がありますが、このファイルの内容はHTML形式です。

  1. 方法は、正しいファイル
  2. を読んでいるファイルは、この方法は、私が見ています実際の問題に今

を見つけるためにしようとしている内容を持っています。

  1. キュウリシナリオのsearch_stringには、検索する3つの値があります。 "White Tiger"はファイルにはありません
  2. "White Tiger"はファイルに含まれていないので、テストは失敗します。代わりにテストがパスします。 "緑色"と表示され、実際の結果を出力します。上のコードではっきりと示されています(ノコギリの場合は真、キュウリの場合は真、ホワイトタイガーの場合はfalse)。

どうすればいいですか?キュウリのテーブル結果は、ファイルで使用可能な値については緑色/合格、ファイルにない場合には赤色/不合格が表示されます。

誰か助けてもらえますか?事前に感謝します。

答えて

1

キュウリは、例外が発生しない限り、ステップを失敗しません(これは、RSpecマッチャーが満たされない場合に起こります)。 trueまたはfalseを返すだけでは意味がありません。

あなたの主張は、おそらくあなたがあるとして、あなたのcheck_email機能を使用したい場合は、あなたのステップ定義にアサーションを追加することができます

if (!doc.content["#{search_string}"]) 
    raise "Expected the file to contain '#{search_string}'" 
end 
+0

回答ありがとうございます。 – user1126946

+1

私のまたは無礼の答えがあなたを助けてくれたなら、アップ投票を考え、そのうちの1つを受け入れたとマークしてください、ありがとう! –

0

次のようになります。

Given /^the email should have$/ do |table| 
    table.hashes.each do |hash| 
    check_email(hash["search_string"]).should be_true 
    end 
end 

あなたは可能性もちょうど電子メール機能で文字列を返すようにして、ステップ定義で内容を確認してください。

require 'nokogiri' 

def email_contents 
    html = IO.read(filename) 
    doc = Nokogiri::HTML::DocumentFragment.parse(html) 
    return doc.content 
end 

# ... 

Given /^the email should have$/ do |table| 
    contents = email_contents 

    table.hashes.each do |hash| 
    contents.should include(hash["search_string"]) 
    end 
end 

これはJon Mのアプローチよりも良くないか悪いことではありません。

関連する問題