2014-12-12 3 views
2

Я столкнулся с ошибкой, выполняющейся при запуске пакета rake test. Этот файл является test/integration/users_index_test.rb. Похоже, что ниже:Ruby on Rails 4 Test Failure (функция удаления)

require 'test_helper' 

class UsersIndexTest < ActionDispatch::IntegrationTest 

    def setup 
    @admin  = users(:michael) 
    @non_admin = users(:archer) 
    end 

    test "index as admin including pagination and delete links" do 
    log_in_as(@admin) 
    get users_path 
    assert_template 'users/index' 
    assert_select 'div.pagination' 
    first_page_of_users = User.paginate(page: 1) 
    first_page_of_users.each do |user| 
     assert_select 'a[href=?]', user_path(user), text: user.name 
     unless user == @admin 
     assert_select 'a[href=?]', user_path(user), text: 'delete', 
                method: :delete 
     end 
    end 
    assert_difference 'User.count', -1 do 
     delete user_path(@non_admin) 
    end 
    end 

    test "index as non-admin" do 
    log_in_as(@non_admin) 
    get users_path 
    assert_select 'a', text: 'delete', count: 0 
    end 
end 

Запуск теста на грабли, я получаю следующее сообщение «сбой»:

1) Failure: 
UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links [/Users/********/workspace/myapp/test/integration/users_index_test.rb:19]: 
<delete> expected but was 
<User 19>. 
Expected 0 to be >= 1. 

19 runs, 49 assertions, 1 failures, 0 errors, 0 skips 

Любые идеи, что не так? Благодарю.

View (index.html.slim):

- provide(:title, 'All users') 
h1 
    | All users 

= will_paginate 

ul.users 
    - @users.each do |user| 
    = render @users 

= will_paginate 

_user.html.slim:

li 
    = gravatar_for user 
    = link_to user.name, user 
    - if current_user.admin? && !current_user?(user) 
    | | <%= link_to "delete", user, method: :delete, data: { confirm: "You sure?" } %> 
+0

А как выглядит вид? –

+0

Дважды проверьте файл fixture 'users.yml' и убедитесь, что у вас есть строка' admin: true' для ': michael'. –

+0

Пользователь michael имеет admin true в файле users.yaml. Мнения были добавлены к вопросу выше. – user1072337

ответ

3

Может быть, проблема в шаблоне: при вызове render @users Rails уже перебирать список пользователей, у вас есть в @users, так что вам не нужно .each do часть:

... 
ul.users 
    - @users.each do |user| 
    = render @users 
... 

Вы можете сделать это просто так:

... 
ul.users = render @users 
... 

Я новичок следующий же учебник, поэтому не уверен, что это хороший ответ. Дайте мне знать, если это поможет ...

0

У меня была такая же проблема, и это потому, что ваш тонкий синтаксис не очень хорош.

Исправление было проверить, если парциальное: _user.html.slim содержал текст, который вы пытаетесь утверждать в тесте, в этом случае ваш users_index_test.rb содержит:

first_page_of_users.each do |user| 
    assert_select 'a[href=?]', user_path(user), text: user.name 
    unless user == @admin 
    assert_select 'a[href=?]', user_path(user), text: 'delete', 
               method: :delete 
    end 
end 

Вы утверждаете, что text: 'delete', т. Е. Тест ищет такой текст в вашем index.html.slim, который снова заполняется вашим частичным _user.html.slim (для этого есть объяснение, так как render @users is на самом деле r их в частичном) и угадать, что у вас неправильный тонкий синтаксис.

решение Try рудником для _user.html.slim:

li 
    = gravatar_for user, size: 50 
    = link_to user.name, user 
    - if current_user.admin? && !current_user?(user) 
    /These 3 lines below are my slim hack for inserting -> " | " <- in front of "delete" /! 
    =< 
    | 
     | 
    =< link_to "delete", user, method: :delete, data: {confirm: "You sure?"} 

railstutorial.org по mhartl (добавленным для ради поиска)

0

Я имел точно такую ​​же ошибку.

Это было связано с тем, что я размещал код для _user.html.erb в index.html.erb. убедитесь, что ваш _user.html.erb верен.

index.html.erb

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

<%= will_paginate %> 

<ul class="users"> 
    <%= render @users %> 
</ul> 

<%= will_paginate %> 
0

Я имел запятые в моем файле users.yml. Не знаю, почему я добавил их, но как только я их вытащил, если исправил свою проблему.

майкл: Имя: Michael Пример электронная почта: [email protected] password_digest: <% = User.digest ('пароль')%> админ: истинный активирован: истинный activated_at: <% = Time.zone.now%>

против

майкл: имя Майкл Пример электронная почта: [email protected] password_digest: <% = User.digest ('пароль')%> админ: правда, активировано: правда, activated_at: <% = Time.zone.now%>

2

Получалась точно такая же проблема. Для меня проблема была в файле users.yml. Администратор, с которым я входил в систему, как и в тесте, имел двойную запись в файле user.yml .

dom: 
    name: Dom Example 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 
    admin: true 

dom: 
    name: James Brown 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 
Смежные вопросы