我已经在互联网上搜索了一个答案,却一无所获......这让我疯了!
在我的任何测试中都没有assert_select
个语句。我一再确认该元素实际上是在目标页面上的dom中 - 它是 - 但是每个测试都在assert_select语句上失败。甚至像assert_select 'body'
那样一般!
以下是一项测试:
require 'test_helper'
class UsersIndexTest < ActionDispatch::IntegrationTest
def setup
@user = users(:matt)
end
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.first_name
end
end
end
此处的用户/ index.html.haml
%h1 All Users
= link_to 'New User', new_user_path
= will_paginate
%table
%thead
%tr
%th
%th First name
%th Last name
%th Email
%th
%th
%th
%tbody
- @users.each do |user|
%tr
%td= gravatar_for(user)
%td= user.first_name
%td= user.last_name
%td= user.email
%td= link_to 'Show', user
%td= link_to 'Edit', edit_user_path(user)
%td= link_to 'Destroy', user, :method => :delete, :data => { :confirm => 'Are you sure?' }
= will_paginate
非常无聊的东西,对吧?然而,测试失败:
FAIL["test_index_including_pagination", UsersIndexTest, 0.9574]
test_index_including_pagination#UsersIndexTest (0.96s)
Expected at least 1 element matching "div.pagination", found 0..
Expected 0 to be >= 1.
test/integration/users_index_test.rb:12:in `block in <class:UsersIndexTest>'
即使我将断言更改为assert_select div
,它也会失败。而且,当我访问索引页面时,我可以再次确认div存在。
我在这里缺少什么!?!?!?!
如果有帮助,请点击我的宝石文件:
source 'https://rubygems.org'
gem 'rails', '4.2.0'
gem 'pg'
gem 'puma'
gem 'turbolinks'
gem 'jquery-rails'
gem 'bcrypt', '~> 3.1.7'
gem 'faker', '~> 1.4.2'
gem 'sass-rails', '~> 5.0.1'
gem 'bootstrap-sass', '~> 3.2.0'
gem 'will_paginate', '~>3.0.7'
gem 'bootstrap-will_paginate','~>0.0.10'
gem 'uglifier', '>= 2.5.0'
gem 'haml-rails', '~> 0.8'
gem 'jbuilder', '~> 2.2.3'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'rest-client', '~> 1.7.3'
gem 'bourbon'
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0.0'
gem 'spring'
gem 'better_errors'
end
group :test do
gem 'minitest-reporters', '~> 1.0.5'
gem 'mini_backtrace', '~> 0.1.3'
gem 'guard-minitest', '~> 2.3.1'
end
group :production do
gem 'rails_12factor'
end
ruby '2.2.0'
感谢Steve Klein建议打印出响应机构。不幸的是,情节只会变浓。身体显然有标记我的目标!
在上述测试中添加了一行
assert_template 'users/index'
puts @response.body
assert_select 'div.pagination'
输出有标签!
←上一页
然而仍然失败!!!
FAIL["test_index_as_admin_including_pagination_and_delete_links", UsersIndexTest, 1.412393] test_index_as_admin_including_pagination_and_delete_links#UsersIndexTest (1.41s)
Expected at least 1 element matching "div.pagination", found 0..
Expected 0 to be >= 1.
test/integration/users_index_test.rb:15:in `block in <class:UsersIndexTest>'
答案 0 :(得分:2)
确保加载足够的测试数据以触发分页。除非分页启动,否则此选择器不会出现在您的页面上(取决于您在控制器操作中如何配置will_paginate)。
答案 1 :(得分:1)
可能问题出在第13行:User.paginate(page: 1).each do |user|
。尝试注释循环或将其删除并再次运行测试。如果现在成功,可能是您更改了/users_controller.rb文件中的默认分页方法。尝试将自定义分页方法与集成测试中的分页方法进行匹配。例如以下内容:User.paginate(page: 1, per_page: 10).each do |user|
答案 2 :(得分:0)
我在assert_select 'div.pagination'
遇到了同样的问题,所以我想通过这个帖子来搜索错误。
我读了帖子并回到了我的应用程序。 我试着测试一下:
assert_select 'div'
过去了。 然后我转回到:
assert_select 'div.pagination'
并且测试也通过了:O
供您参考,这是我的users_index_test.rb
require 'test_helper'
class UsersIndexTest < ActionDispatch::IntegrationTest
def setup
@user = users(:archer)
end
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
end
这是我的夹具users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
lana:
name: Lana Kane
email: hands@example.gov
password_digest: <%= User.digest('password') %>
mallory:
name: Mallory Archer
email: boss@example.gov
password_digest: <%= User.digest('password') %>
<% 30.times do |n| %>
user_<%= n %>:
name: <%= "User #{n}" %>
email: <%= "user-#{n}@example.com" %>
password_digest: <%= User.digest('password') %>
<% end %>
我真的不知道为什么现在通过,但我想为更合理的解决方案做出贡献。
答案 3 :(得分:0)
仔细检查您的Fixture文件是否有错别字,并确保您确实加载了足够的注释以触发包含分页。
我遇到了与您相同的问题,源自Ruby on Rails教程的第13章。我在测试中加入了“ puts response.body”,发现在测试期间未生成我尝试在“ comments.yml”中生成的ERb注释。问题出在我忘记了ERb标签中的单个“ =”符号。希望对您来说解决方案同样简单!
答案 4 :(得分:0)
对于将来遇到此问题的任何人,您都清楚地知道您尝试了上述所有解决方案,但没有任何改变。 注意users.yml文件中的这一行
错误:
<% 30.times do |n| %>
user_<%= n %>:
name: <%= "User #{n}" %>
email: <%= "user-#{n}@example.com" %>
password_digest: <%= User.digest('password') %>
<% end %>
错误:
<% 30.times do |n| %>
user_<%= n %>:
name: <%= "User #{n}" %>
email: <%= "user-#{n}@example.com" %>
password_digest: <%= User.digest('password') %>
<% end %>
正确:
<% 30.times do |n| %>
user_<%= n %>:
name: <%= "User #{n}" %>
email: <%= "user-#{n}@example.com" %>
password_digest: <%= User.digest('password') %>
<% end %>