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

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

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

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

Q&A

解決済

2回答

299閲覧

get_byメソッドがテストでのみエラーとなる

hoge01

総合スコア17

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/10/06 12:02

編集2018/10/06 13:41

事情により具体的なコードが書けずふわっとした質問で申し訳ないのですが、ご容赦ください。

今回 ruby on rails5 で開発をしていたのですが、ロントローラー中に書いたget_byメソッドが、テストを実行した時nilになってエラーを出してしまいます。
試しにviewに結果を渡してサーバーで表示させてみたのですが、正しくget_byが働き、取得した値が表示されているように見えます。

テスト中に正しくデータベースが働いていないと予測したのですが、未熟ゆえ解決方法がわかりません。
どうかご助言いただきたいです。

以下コードの一部です

nums.each do |num| items << Sale.find_by(pnum: num.to_i) items[-1] = items[-1].product_name end

以下エラ―の一部です

NoMethodError: NoMethodError: undefined method `product_name' for nil:NilClass ... 2 tests, 1 assertions, 0 failures, 1 errors, 0 skips

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

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

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

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

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

dice142

2018/10/06 13:28

「nilになってエラーを出す」ではわかりません。エラー文のご提示も難しいのでしょうか?
hoge01

2018/10/06 13:41

申し訳ありません。一部を追加しました。
guest

回答2

0

自己解決

fixtureがテスト時に読み込まれるのでfixtureを削除することで解決しました。

投稿2018/10/13 07:22

hoge01

総合スコア17

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

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

0

Ruby

1Sale.find_by(pnum: num.to_i)

この部分でレコードが取得できていないのでitemsの最後の要素がnilになる部分があり、
items[-1].product_nameでエラーが出ます。

具体的なコードを記載できないということですので、
numsに入っている数値とSalepnumの数値が合っているか
確かめていけば解決できると思います。

投稿2018/10/06 13:56

dice142

総合スコア5158

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

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

hoge01

2018/10/06 14:12 編集

回答有り難うございます。 試しにrender :html でitemの値をブラウザに表示してみたところ期待通りの結果が取得でき、numsでも期待通り動きました。 しかしテストだけは失敗してしまいます。 テストの内容は単純に test "should get " do get gdata_path assert_response :success end このようなものです テストだけで失敗してるのはどうしてだろうと不思議に思っています
dice142

2018/10/06 14:31

gdata_pathでアクセスした時に該当の箇所の処理が行われ、 その際に引っかかっているか、 もしくは引っかかっているテストがそこではないとかではないでしょうか?
hoge01

2018/10/06 14:57 編集

renderで渡す際も、該当箇所を経由しないと値は得られないコードだと思っています itemsがテストの際だけget_byで失敗し、nilになっているということはテストの際のデータベースに問題があるのかもなぁと思ったのですが、テストの際のみにデータベースに何らかがあるというのはありえるのでしょうか...?
dice142

2018/10/06 15:07

設定ファイルによりますが、基本的にデータベースは開発環境とテスト環境と本番環境で異なります。 なのでテストの時だけデータベースに何か問題が起きるのはありえます。
hoge01

2018/10/06 15:40 編集

ありがとうございます。そのあたりで探ってみたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問