我有一个黄瓜场景,它检查文件中的某些字符串。不是一种非常理想的做事方式,但它被视为绝对需要。
我的黄瓜情景有一个表格:
电子邮件应该
|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格式。
现在谈到我所看到的实际问题。
我的问题是如何做到这一点。黄瓜表结果应仅对文件中可用的值显示GREEN / PASS,对于不在文件中的值显示RED / FAIL。
有人可以帮我解决这个问题。提前欣赏。
答案 0 :(得分:1)
除非引发异常,否则黄瓜不会失败一步(这是当RSpec匹配器不满意时会发生的情况)。简单地返回真或假是没有意义的。
你的断言应该看起来像
if (!doc.content["#{search_string}"])
raise "Expected the file to contain '#{search_string}'"
end
答案 1 :(得分:0)
如果您想按原样使用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
这些并不比Jon M的方法更好或更差 - 只是另一种选择。