Сценарий поиска огурца в файле с использованием ruby - PullRequest
0 голосов
/ 04 января 2012

У меня есть сценарий огурца, который проверяет определенные строки в файле.Не очень идеальный способ ведения дел, но он считается абсолютной необходимостью.

Сценарий «Мой огурец», в котором есть таблица:

И в письме должно быть указано

|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 значения для поиска.«Белого тигра» нет в файле
  2. Так как «Белого тигра» нет в файле, тест должен провалиться, но вместо этого тест проходит успешно / я должен сказать, что вижу «зеленый», и когда я вывожуфактические результаты, как указано выше в коде, который он четко показывает (верно для Nokogiri, верно для Cucumber и false для White Tiger).

Мой вопрос: как я могу это сделать?Результаты таблицы огурцов должны показывать GREEN / PASS только для значений, которые доступны в файле, и RED / FAIL для значений, которых нет в файле.

Может кто-нибудь, пожалуйста, помогите мне с этим.Цените заранее.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Огурец не провалит шаг, если не возникнет исключение (это то, что происходит, когда соответствие RSpec не выполняется) Просто возвращать истину или ложь бессмысленно.

Ваше утверждение должно выглядеть примерно так:

if (!doc.content["#{search_string}"])
    raise "Expected the file to contain '#{search_string}'"
end
0 голосов
/ 06 января 2012

Если вы хотите использовать check_email функцию как есть, вы можете добавить утверждение к определению вашего шага:

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

Это не лучше и не хуже, чем подход Джона М. - просто еще одна альтернатива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...