【问题标题】:Ruby way of writing this spec in "Rspec"在“Rspec”中编写此规范的 Ruby 方式
【发布时间】:2014-05-31 03:55:47
【问题描述】:

我想知道是否有任何 Ruby 方式来编写以下视图规范(不使用 Capybara/Cucumber/Webrat 助手。应该只是在 rspec 或 rspec-rails 中):

expect(rendered).to include("<input class='toggle_m' name='result_configuration[information]' type='checkbox' value='1'>")

expect(rendered).to include("<textarea class=details' disabled='disabled' name=result_configuration[info][]'></textarea>")

问题是,我需要查看复选框是否被选中(意味着值为“1”,未选中时值设置为“0”)然后应该禁用 textarea。有什么想法吗?

或者你会如何以更易读的方式写出这个期望?欢迎提出建议。

谢谢。

【问题讨论】:

  • 有什么理由不想使用 Capybara?我发现它完全简化了这个问题。
  • 原因是项目所有者现在还没有准备好添加新的 gem,没有具体原因。我试图解释,但没有运气。
  • 运气不好!很公平,你的方式很好,我唯一的其他建议是使用正则表达式,不过你的方式可能更具可读性,我会给出一个答案来演示。
  • 复选框在其checked 属性设置时处于“打开”状态。
  • @Stefan - 我不确定你在这里想说什么。您是在谈论值(即“1”)吗?

标签: ruby ruby-on-rails-3 rspec rspec2 rspec-rails


【解决方案1】:

为了测试和覆盖而编写这样的测试只会让继承代码库的人变得困难。我编写了这样的测试只是为了在以后删除它们,因为 UI 的更改更加频繁,并且这样的测试会减慢开发人员的速度。如果我仍然必须以 OO 方式编写它们,我会在 pageobjects 的行(这是一个 gem)上设计它 - dom 上的包装类和一些通用帮助函数。此外,使用 Gemfile/bundler 在测试组中添加新的 gem 不会影响生产服务器。

【讨论】:

    【解决方案2】:

    你可以试试正则表达式,但我认为你的方法已经足够好了。

    expect(rendered).should =~ /<input[^>]*name='result_configuration[information]'[^>]*value='1'[^>]*>/
    expect(rendered).should =~ /<textarea[^>]*disabled='disabled'[^>]*name=result_configuration[info][][^>]*>
    

    这种方法的限制是,如果有任何选中的复选框和任何禁用的文本区域,它将通过,做更多的事情我肯定需要水豚或其他东西来实际解析 html (regexes are not parsers)

    编辑:将name= 部分添加到两个正则表达式中,作为对评论的回应。这种方法的唯一优点是,如果您更改元素的类,它不会中断。不幸的是,除了外部 gem 之外,我不知道任何更好的解决方案。

    【讨论】:

    • 您好,感谢您抽出一些时间来回答。但是,这应该只适用于 name = result_configuration[information] 和 textarea 的 name=result_configuration[info][] 的复选框。
    • 很公平,我会将它们放入正则表达式中,你知道那将永远是这个顺序吗? (如果不是,您需要在之前和之后的情况下使用 or )
    • 哦,我在上面评论之后才看到更新。我也更喜欢 capybara 以获得更多 DOM 级别的期望。我想是否有人知道以更易读的方式编写此规范的更好方法。是的,它们将始终按此顺序排列。
    • 是的。如果有人能在不使用 capybara 等的情况下提出一个干净的解决方案,我会很感兴趣。有时间我会回来看看是否有人可以。
    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多