質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1231閲覧

rubyonrailsチュートリアル10章のassertのエラー

mugichon

総合スコア61

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/06/23 02:32

ruby on rails チュートリアル(5.1版)の10章で詰まっています。
リスト 10.62で、以下のコードのテストをしようとしたところ、assertでエラーが発生しました。
デバッグ方法も限られており、原因が全く分からず途方に暮れています。。
すみませんが、よろしくお願いします。

[test/integration/users_index_test.rb]

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' end end assert_difference 'User.count', -1 do delete user_path(@non_admin) end end

[error]

ERROR["test_index_including_pagination", Minitest::Result, 0.9957311759935692] test_index_including_pagination#Minitest::Result (1.00s) Minitest::UnexpectedError: NoMethodError: undefined method `email' for nil:NilClass test/test_helper.rb:26:in `log_in_as' test/integration/users_index_test.rb:16:in `block in <class:UsersIndexTest>' FAIL["test_index_as_admin_including_pagination_and_delete_links", Minitest::Result, 1.0364086409681477] test_index_as_admin_including_pagination_and_delete_links#Minitest::Result (1.04s) Expected at least 1 element matching "a[href="/users/1028376774"]", found 0.. Expected 0 to be >= 1. test/integration/users_index_test.rb:41:in `block (2 levels) in <class:UsersIndexTest>' test/integration/users_index_test.rb:40:in `block in <class:UsersIndexTest>'

エラーの具体的な個所が分からなかったため、putsあたりで評価中のユーザ名を指定したところ、User-6で必ずエラーになっていることが分かりました(必ずここでエラーが発生)。

[デバッグを入れたエラー結果]

Sterling Archer duchess@example.gov= ] 34% Time: 00:00:00, ETA: 00:00:01 Lana Kane hands@example.gov Malory Archer boss@example.gov User 0 user-0@example.com User 1 user-1@example.com User 2 user-2@example.com User 3 user-3@example.com User 4 user-4@example.com User 5 user-5@example.com User 6 user-6@example.com FAIL["test_index_as_admin_including_pagination_and_delete_links", Minitest::Result, 0.6730378799838945] test_index_as_admin_including_pagination_and_delete_links#Minitest::Result (0.67s) Expected at least 1 element matching "a[href="/users/1028376774"]", found 0.. Expected 0 to be >= 1. test/integration/users_index_test.rb:42:in `block (2 levels) in <class:UsersIndexTest>' test/integration/users_index_test.rb:40:in `block in <class:UsersIndexTest>'

fixturesのusers.ymlもチュートリアル通りで特に問題なさそうです。。

michael: name: Michael Example email: michael@example.com2 password_digest: <%= User.digest('password') %> admin: true 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') %> malory: name: Malory 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 %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

text

1

NoMethodError: undefined method email' for nil:NilClass test/test_helper.rb:26:in log_in_as'

.

rb

def log_in_as(user, options = {})
password = options[:password] || 'password'
remember_me = options[:remember_me] || '1'
if integration_test?
post login_path, session: { email: user.email,
password: password,
remember_me: remember_me }
else
session[:user_id] = user.id
end
end

[Rails tutorial 8章 リスト8.50](https://railstutorial.jp/chapters/log_in_log_out?version=4.2#code-test_helper_log_in)より

.

rb

log_in_as(@admin)

.

rb

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

[Rails tutorial 8章 リスト10.62](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#code-delete_link_integration_test)より

なので

rb

1@admin = users(:michael)

nil になっているんじゃないですか?
何故かは知りませんけど...。

投稿2020/06/23 03:06

Mugheart

総合スコア2340

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mugichon

2020/06/24 00:01

ご回答ありがとうございます。 引用頂いたのは4.2ですが、現在5.1のチュートリアルで確認していますので、 以下のコードでしょうか。 ただ…なぜnilになるかは分からないのですが… ``` # テストユーザーとしてログインする def log_in_as(user) session[:user_id] = user.id end end class ActionDispatch::IntegrationTest # テストユーザーとしてログインする def log_in_as(user, password: 'password', remember_me: '1') post login_path, params: { session: { email: user.email, password: password, remember_me: remember_me } } end end [リスト9.24](https://railstutorial.jp/chapters/advanced_login?version=5.1#cha-advanced_login) ```
Mugheart

2020/06/24 00:04

4.2版になってましたね、失礼しました。 どちらにせよ言えることは同じでして、@admin にレコードが入ってるか確認してもらえますか?
mugichon

2020/06/24 09:35

ご回答ありがとうございます。putsあたりで@userと@adminを出力するようにしてみましたが、途中までは特にadminの中身が無くなるという事もないようです。 USER:Sterling Archer ADMIN:Michael Example USER:Lana Kane ADMIN:Michael Example USER:Malory Archer ADMIN:Michael Example USER:User 0 ADMIN:Michael Example USER:User 1 ADMIN:Michael Example USER:User 2 ADMIN:Michael Example USER:User 3 ADMIN:Michael Example USER:User 4 ADMIN:Michael Example USER:User 5 ADMIN:Michael Example USER:User 6 ADMIN:Michael Example FAIL["test_index_as_admin_including_pagination_and_delete_links", Minitest::Result, 0.6014891269987857] test_index_as_admin_including_pagination_and_delete_links#Minitest::Result (0.60s) Expected at least 1 element matching "a[href="/users/1028376774"]", found 0.. Expected 0 to be >= 1. test/integration/users_index_test.rb:43:in `block (2 levels) in <class:UsersIndexTest>' test/integration/users_index_test.rb:40:in `block in <class:UsersIndexTest>'
mugichon

2020/06/24 23:01

なぜかNilの部分は解決してしまいました…後は、以下の部分が発生している状況です。 FAIL["test_index_as_admin_including_pagination_and_delete_links", Minitest::Result, 0.7014458769990597] test_index_as_admin_including_pagination_and_delete_links#Minitest::Result (0.70s) Expected at least 1 element matching "a[href="/users/1028376774"]", found 0.. Expected 0 to be >= 1. test/integration/users_index_test.rb:43:in `block (2 levels) in <class:UsersIndexTest>' test/integration/users_index_test.rb:40:in `block in <class:UsersIndexTest>'
mugichon

2020/06/27 01:21

nullは解消したので、一旦こちらは終了とさせていただきます。ご対応ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問