如何为Rails的views写测试。

[b]原文链接:[url]http://weblog.jamisbuck.org/2007/1/29/testing-your-views[/url][/b]

简单的说,就是[b][color=red]别用断言来测试你的页面结构。[/color][/b]
也就是说,别这么做:

#输入框必须在一个table的单元格里
assert_select "table td input[type=text]"
#person.name必须在h2标签里
assert_select "h2", person.name


为什么呢?因为你会希望页面(的结构)非常的容易改变(be very fluid)。你会希望改动页面的成本很低以便于你可以毫不犹豫地投入到页面的重新布局,从而使页面变得更干净。如果你在测试代码里使用的是明确的标签名,那你的页面结构将会变得十分僵硬。因为你的测试代码暗示着使用table以外的标签来排版你的表单是错误的。想用h1或者div来包装person.name吗?你不敢,这样会使测试失败。

一个更好的方式是:思考一下你真正想要测试的是什么。

首先,别测试静态的内容,比如table的结构、表单域(form fields)的顺序。相反的,要测试的是页面上动态的部分,特别是受条件支配渲染的部分(especially those parts that are subject to conditional rendering. )。

第二,测试语义,而不是测试语法(test semantically, not syntactically. )。也就是说,别基于标签的类型写测试,而是基于你要展现的内容。用CSS的class属性或者DOM的id来代替明确的标签名。

这里有个实例,假设有个这样的页面:
<% if @user.administrator? %>
Hi <%= @user.name %>! You appear to be an administrator.
<%= link_to "Click here", admin_url, :id => "admin_link" %>
to see the admin stuff!
<% end %>

这里唯一真正有必要测试的是:admin的链接只能让管理员(administrators)看见。也许你会想测试链接是否指向你期望的地方,但那是次要的。

def test_admin_sees_link
# 为管理员set up一个session,然后:
get "index"
assert_select "#admin_link"
end

def test_non_admin_does_not_see_link
# 先为非管理员用户set up一个session,然后:
get "index"
assert_select "#admin_link", false
end


像这样安排你的测试会让测试代码更少的干扰到你为页面的美化而进行的调整。而且这会增强你对测试的信心,同时你也会很乐意去调整界面。

相关链接:[url="http://www.robbyonrails.com/articles/2007/08/02/spec-your-views"]Spec your views[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值