2012-01-04 3 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"가 파일에 없으므로 테스트가 실패하지만 대신 테스트가 통과됩니다. "녹색"이라고 표시되어야하고 실제 결과를 다음과 같이 출력해야합니다. 위의 코드에서 명확히 보여줍니다 (Nokogiri의 경우 true, Cucumber의 경우 true, 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

내 또는 무심한 답변으로 도움이 되었다면, 투표를 높이고 그 중 하나를 수락 한 것으로 표시하십시오. 감사합니다! –

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의 접근 방식보다 뛰어나거나 나쁘지 않습니다.

관련 문제