[b]原文链接:[url]http://weblog.jamisbuck.org/2007/1/29/testing-your-views[/url][/b]
简单的说,就是[b][color=red]别用断言来测试你的页面结构。[/color][/b]
也就是说,别这么做:
为什么呢?因为你会希望页面(的结构)非常的容易改变(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来代替明确的标签名。
这里有个实例,假设有个这样的页面:
这里唯一真正有必要测试的是:admin的链接只能让管理员(administrators)看见。也许你会想测试链接是否指向你期望的地方,但那是次要的。
像这样安排你的测试会让测试代码更少的干扰到你为页面的美化而进行的调整。而且这会增强你对测试的信心,同时你也会很乐意去调整界面。
相关链接:[url="http://www.robbyonrails.com/articles/2007/08/02/spec-your-views"]Spec your views[/url]
简单的说,就是[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]