2016-04-29 5 views
0

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 
+0

いつあなたはbyebugを使ってtestを実行しますか? 'assert_select 'a [href =?]'、user_path(user)'? –

+0

のbyebugでは、初めてユーザリンクを正しく見つけることができますが、 'continue'の後にuser.idがレンダリングされたページとuser.eachループで異なるため、次のユーザを見つけることができません。 –

+0

他のユーザーとのリンクがありますか? –

答えて

0

OK、テストではハッシュ値がモデルに正しく渡されませんでした。私が障害を持って

以下元のテストコードがテストにユーザーの間違ったセットを提供し:

User.paginate(page: 1).each do |user| 

次のように奇妙なエラーを生成したテストに並べ替えを追加する唯一の値が場合渡されたことを示します2つは期待された。私が使用したコードされた:

User.search(term: 'al', page: 1).each do |user| 

がにテストコードを変更することで問題を修正しました:

User.search('al', 1).each do |user| 

をテストが今エラーなしで渡します。ハッシュを使ってテストを書くと、エラーが発生したようです(用語: 'al'、page:1)。

関連する問題