我想知道是否有任何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>")
事情是,我需要查看是否选中了复选框(表示值为&#34; 1&#34;,值设置为&#34; 0&#34;当未选中时),则textarea应该被禁用有什么想法吗?
或者您如何以更易读的方式写出这种期望?建议是最受欢迎的。
感谢。
答案 0 :(得分:1)
你可以尝试使用正则表达式,但我认为你的方法已经足够好了。
expect(rendered).should =~ /<input[^>]*name='result_configuration[information]'[^>]*value='1'[^>]*>/
expect(rendered).should =~ /<textarea[^>]*disabled='disabled'[^>]*name=result_configuration[info][][^>]*>
这种方法的局限在于,如果有任何已检查的复选框和任何禁用的textareas它将通过,为了做更多的事情,我肯定需要capybara或其他东西来实际解析html(regexes are not parsers)
编辑:将name=
部分添加到两个正则表达式中作为对评论的回复。这种方法的唯一优点是,如果你改变了元素的类,它就不会中断。不幸的是,除了外部宝石,我不知道更好的解决方案。
答案 1 :(得分:1)
为了测试和覆盖而编写这样的测试只会使继承代码库的人变得困难。我之前编写过这样的测试只是为了删除它们,因为对UI的更改更频繁,而且这样的测试会降低开发人员的速度。如果我仍然必须以OO方式编写它们,我会在pageobjects(这是一个宝石)的线条上设计它 - 在dom上包装类和几个通用辅助函数。使用Gemfile / bundler在测试组中添加新gem也不会影响生产服务器。