Rails5 - 测试问题 - 我正在开发rails 5 beta3中的Web应用程序。 我想测试页面上是否产生了链接。当我运行' rails s'时,链接确实显示在开发站点上,但测试失败。所以我把byebug放在哪里看错了。更新:我发现用户控制器正在发送用' id DESC'但测试是使用默认排序,因此它偶然匹配第一次尝试,然后在第二次尝试失败。
由于错误,我无法让测试运行除默认排序以外的任何其他内容。从模型和控制器添加相关代码。
'耙子测试'传递第一个用户,但第二个用户失败。
失败[" test_index_including_pagination",UsersIndexTest,202.31457826300175] test_index_including_pagination #UsersIndexTest(202.31s) 预计至少有1个元素匹配" a [href =" / users / 205739844"]",找到0 .. 预期0为> = 1。 test / integration / users_index_test.rb:16:'阻止(2级)' test / integration / users_index_test.rb:14:在`block in'
当我尝试使用来自控制器索引操作的代码时,我收到错误。使用byebug输出演示:
(byebug) User.search(term: "al", page: 1 )
*** ArgumentError Exception: wrong number of arguments (given 1, expected 2)
nil
的Gemfile:
source 'https://rubygems.org'
gem 'rails', '5.0.0.beta3'
ruby "2.3.0"
gem 'puma', '~> 3.4.0'
gem 'pg', '~> 0.18.4'
gem 'sass-rails', '~> 6.0.0.beta1'
gem 'uglifier', '~> 3.0.0'
gem 'coffee-rails', '~> 4.1.1'
gem 'therubyracer', '~> 0.12.2'
gem 'jquery-rails', '~> 4.1.1'
gem 'turbolinks', '~> 5.0.0.beta2'
gem 'jbuilder', '~> 2.4.1'
gem 'sdoc', '~> 0.4.1', group: :doc
gem 'argon2', '~> 1.0.0'
gem 'bootstrap-sass', '~> 3.3.6'
gem 'sprockets-rails', '~> 3.0.4'
gem 'will_paginate', '~> 3.1.0'
gem 'bootstrap-will_paginate', '~> 0.0.10'
gem 'faker', '~> 1.6.3'
group :development, :test do
gem 'byebug', '~> 8.2.4'
end
group :development do
gem 'web-console', '~> 3.1.1'
gem 'listen', '~> 3.0.6'
gem 'spring', '~> 1.7.1'
end
group :test do
gem 'rails-controller-testing', '~> 0.1.1'
gem 'minitest', '~> 5.8.4'
gem 'minitest-rails', :github => 'blowmage/minitest-rails', :branch => 'rails5'
gem 'minitest-reporters', '~> 1.1.8'
end
group :production do
gem 'rails_12factor', '~> 0.0.3'
end
TESTCODE:
test "index including pagination" do
log_in_as(@user)
get users_path
assert_template 'users/index'
assert_select 'div.pagination'
User.paginate(page: 2).each do |user|
byebug
assert_select 'a[href=?]', user_path(user)
end
end
控制器:
def index
@users = User.search(params[:term], params[:page])
end
MODEL:
def self.search(term, current_page)
if term
page(current_page).where('name LIKE ?', "%#{term}%").order('id DESC')
else
page(current_page).order('id DESC')
end
end
def self.search(term, page)
if term
where('lower(name) LIKE ?', "%#{term}%".downcase).paginate(page: page, per_page: 5).order('id DESC')
else
paginate(page: page, per_page: 5).order('id DESC')
end
end
答案 0 :(得分:0)
好的,测试没有将散列值正确传递给模型。
下面的原始测试代码为测试提供了错误的用户组,因此我遇到了失败:
User.paginate(page: 1).each do |user|
如下对测试添加排序产生了一个奇怪的错误,表明当预期两个值时只传递了一个值。我使用的代码是:
User.search(term: 'al', page: 1).each do |user|
通过将测试代码更改为:
来解决问题User.search('al', 1).each do |user|
现在测试没有错误。似乎用散列(术语:'al',page:1)编写测试会导致错误。