2015-02-04 52 views
0

这是从哈特尔教程:assert_select和assert_template测试。它在做什么?

这里是我的测试:

test "index including pagination" do 
    log_in_as(@user) 
    get users_path 
    assert_template 'users/index' 
    assert_select 'div.pagination' 
    User.paginate(page: 1).each do |user| 
     assert_select 'a[href=?]', user_path(user), text: user.name 
    end 
end 

这里是我的代码,这是index.html.erb。我没有显示application.html.erb。

<% provide(:title, 'All users') %> 
<h1>All users</h1> 

<%= will_paginate %> 

<ul class="users"> 
    <% @users.each do |user| %> 
    <li> 
     <%= gravatar_for user, size: 50 %> 
     <%= link_to user.name, user %> 
    </li> 
    <% end %> 
</ul> 

<%= will_paginate %> 

assert_template在做什么?

这是从文档:

断言请求与相应的模板 文件或谐音呈现。

是否检查视图或部分的名称?还是检查URL?

什么是assert_select在这里做什么?这是从文档:

一个断言,选择元素,并使一个或多个等于 测试。

是否检查页面上是否存在<div class=pagination>?它在做什么?它是什么主张?

回答

2

首先发送一个GET请求到用户路径

get users_path 

这个检查呈现模板是正确的之后。

assert_template 'users/index' 

它不是直接检查url,但是如果你有任何路由问题,你将无法获得正确的模板。

然后,为了测试分页,它检查模板中是否存在class =“pagination”的div元素,该元素由所使用的分页宝石添加。

assert_select 'div.pagination' 

assert_select获取模板的html元素并检查给定元素是否存在。

最后,它获取分页第一页的用户(应该在索引页上),并且每个用户都检查页面中是否存在链接到用户url的元素并包含该文本对应于用户名。

User.paginate(page: 1).each do |user| 
    assert_select 'a[href=?]', user_path(user), text: user.name 
相关问题