Rails5 - テストの問題 - 私はrails 5 beta3でWebアプリケーションを開発しています。 リンクがページ上に生成されているかどうかをテストします。私は 'rails s'を実行するとリンクが開発サイトに表示されますが、テストは失敗します。だから私はbyebugをどこに間違っているか見るために置いた。更新:私は、ユーザーのコントローラが 'id DESC'によってソートされたユーザーを送信していることがわかりましたが、テストではデフォルトのソートが使用されています。rails 5 assert_selectは、モデルとテストのソート順が異なるため、テストに失敗します。
エラーのためにデフォルトのソート以外で実行するテストを取得できません。モデルとコントローラから関連コードを追加する。
'レイクテスト'は最初のユーザーには渡されますが、2番目のユーザーには失敗します。
FAIL [ "test_index_including_pagination"、UsersIndexTest、202.31457826300175] test_index_including_pagination#UsersIndexTest(202.31s) 予想少なくとも1つのエレメントマッチング "[HREF =" /ユーザ/ 205739844 "が"、 .. 0を発見> = 1 テスト/統合/ users_index_test.rbことが0を期待:16:に テスト/統合/ users_index_test.rb 'ブロック(2つのレベル)に':14: `ブロックに
'にコントローラのインデックスアクションからコードを使用しようとすると、エラーが発生します。
(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
CONTROLLER:
def index
@users = User.search(params[:term], params[:page])
end
MODEL:
012 byebug出力で実証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
いつあなたはbyebugを使ってtestを実行しますか? 'assert_select 'a [href =?]'、user_path(user)'? –
のbyebugでは、初めてユーザリンクを正しく見つけることができますが、 'continue'の後にuser.idがレンダリングされたページとuser.eachループで異なるため、次のユーザを見つけることができません。 –
他のユーザーとのリンクがありますか? –