【问题标题】:Checking for values in a table row in cucumber检查黄瓜表行中的值
【发布时间】:2011-05-19 04:14:52
【问题描述】:

我正在尝试检查数据表中的值是否正确,所以我要做的是选择所有行并检查我正在检查的对象名称和值的某个 tr has_content 是否正确。问题是,我似乎无法在黄瓜中执行return

Then /^I should see "([^"]*)" beside "([^"]*)"$/ do |value, name|
  all("tr").each do |tr|
    if tr.has_content?(value) && tr.has_content?(name)
      assert true and return
    end
  end
  assert false
end

我想要这样的东西。当我找到具有两个值的行时,这意味着它是正确的,我应该停止循环并返回 true(否则它将继续到最后的 assert false

我该怎么做?

【问题讨论】:

    标签: cucumber assertions


    【解决方案1】:

    好吧,这似乎是一个肮脏的黑客,但我只是使用了一个变量来检查:

    Then /^I should see "([^"]*)" beside "([^"]*)"$/ do |value, name|
      has_value_and_name = false
      all("tr").each do |tr|
        if tr.has_content?(value) && tr.has_content?(name)
          has_value_and_name = true
        end
      end
      assert has_value_and_name
    end
    

    我不确定它是否适用于所有情况...但如果您有更好的解决方案,请也发布它。谢谢!

    【讨论】:

    • 您应该使用 .should 方法,而不是旧的单元测试“断言”,它是 rspec/cucumber 的一部分。请参阅下面的答案
    • 我不认为 assert vs 在这一点上应该很重要,因为这是一个偏好问题:)
    【解决方案2】:

    如果它用 Watir 驱动浏览器,你可以这样做

    matchvalue = regex.new(value)
    matchname = regex.new(name)
    
    browser.row(:text => matchvalue, :text => matchname).exists?.should = true   
    

    在你的情况下怎么办

    Then /^I should see "([^"]*)" beside "([^"]*)"$/ do |value, name|
      result = false
      all("tr").each do |tr|
        if tr.has_content?(value) && tr.has_content?(name)
          result = true
          break
        end
      end
      result.should = true
    end
    

    【讨论】:

    • 在黄瓜步骤中返回会弄乱我的杯子。它说不应该有回报什么的
    • "什么的" ??如果您真的需要帮助,确切的错误消息会很有帮助。我想总是可以省略返回,它会更慢,因为它必须处理所有行,但应该以其他方式工作。如果您打算使用 cucumber 进行结果报告等,请停止使用断言并开始使用 .should 匹配器
    • 对不起,我做了一个工作,因为我的很脏,所以我不再使用它了。无论如何,我试图再次重现错误,这就是我用上面的代码得到的:意外返回(LocalJumpError)
    • 啊等等..你可能应该在那里使用'break'关键字,而不是'return',因为你并不真正在一个方法中,这可能就是它不喜欢返回的原因跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多