我想知道是否有任何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"),然后文本区域应该被禁用。知道吗?
或者,你会如何以更易读的方式写下这个期望?欢迎提出建议。
谢谢。
您可以尝试regex,但我认为您的方法已经足够好了。
expect(rendered).should =~ /<input[^>]*name='result_configuration[information]'[^>]*value='1'[^>]*>/
expect(rendered).should =~ /<textarea[^>]*disabled='disabled'[^>]*name=result_configuration[info][][^>]*>
这种方法的局限性在于,如果有任何选中的复选框和任何禁用的文本区域,它将通过,要做更多的事情,我肯定需要水豚或其他东西来实际解析html(正则表达式不是解析器)
EDIT:将name=
部分添加到两个正则表达式中,作为对注释的响应。此方法的唯一优点是,如果您更改元素的类,它不会中断。不幸的是,除了外部宝石,我不知道还有什么更好的解决方案。
为了测试和覆盖而编写这样的测试只会让继承代码库的人感到困难。我编写这样的测试只是为了稍后删除它们,因为对UI的更改更频繁,并且拥有这样的测试会减慢开发人员的速度。如果我仍然必须以OO的方式编写它们,我会在页面对象(这是一个gem)的行上设计它——在dom上的包装类和一些通用的辅助函数。此外,使用Gemfile/bundler在测试组中添加一个新的gem不会影响生产服务器。