assert_select和assert_template测试。它在做什么?

时间:2015-02-04 22:35:24

标签: ruby-on-rails tdd

这来自Hartl教程:

这是我的测试:

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>?它在做什么?什么是主张?

1 个答案:

答案 0 :(得分:2)

首先向用户路径发送get请求

get users_path

在此检查之后,渲染的模板是正确的。

assert_template 'users/index'

不是直接检查网址,但如果您在路由方面遇到任何问题,则无法获得正确的模板。

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

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