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

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

ただいまの
回答率

91.25%

ファイルをアップロードするテストコードを書くと、railsの警告に引っかかる。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 44

hiepita1

score 16

前提・実現したいこと

jsonファイルをアップロードして、それをテーブルにimportする機能のテストコードを書いています。
テストコード自体は問題なく動くのですが、テスト実行時に非推奨の警告が出てしまっています。

発生している問題・エラーメッセージ

DEPRECATION WARNING: Using positional arguments in integration tests has been deprecated,
in favor of keyword arguments, and will be removed in Rails 5.1.
Deprecated style:
get "/profile", { id: 1 }, { "X-Extra-Header" => "123" }
New keyword style:
get "/profile", params: { id: 1 }, headers: { "X-Extra-Header" => "123" }
 (called from block in <class:MenusControllerTest> at /solution/test/controllers/menus_controller_test.rb:3)

該当のソースコード

MenusController
  #post
  def import
    path = params[:file].path
    result = Menus::ImportService.new(path).import
    flash[:error] = result.error
    redirect_to(menus_path)
  end  
Testコード
  #エラーが出るjsonをimportして、エラーがでたかどうかを確認するテスト 現在はこれで問題なく動いているが、テスト実行時に警告が出てしまう。
  test 'json import error test' do
    ins_jsonpath = Rack::Test::UploadedFile.new(File.expand_path('./docs/testfile/json_ins_check.json', '.'), 'text/json')
    post menus_path(menuname1: 'menuname1', menuname2: 'menuname2'), file: ins_jsonpath
    assert_equal flash[:error].count, 1
  end

試したこと

エラーを見る限り、post時のパラメーターの渡し方に問題がありそうなので、以下のように渡し方を修正してみましたが、だめでした。

post menu_slips_path(menuname1: 'menuname1', menuname2: 'menuname2', file: ins_jsonpath) ➔ controllerparams[:file].pathでエラー

② post menu_slips_path params:{ menuname1: 'menuname1', menuname2: 'menuname2', file: ins_jsonpath } ➔ NoRouteエラー


パラメーターの渡し方云々ではなく、uploadのテスト方法が誤っているような気もしています。
ご教示頂ければと思います。よろしくお願い致します。

補足情報(言語/FW/ツール等のバージョンなど)

Rails5

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

https://dev.classmethod.jp/server-side/ruby-on-rails-5-0-upgrade/
の「gem 'rspec-rails' のバージョンアップに伴う変更」に該当しませんでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/26 09:23 編集

    ご回答ありがとうございます。
    こちらのサイトを参考にし、以下のような記述をするに至ったのですが、NoRouteエラーになってしまいます。
    warningを修正するために、Routeを修正するようなことにはならないと思うのですが、解消方法が誤っていますでしょうか

    ② post menu_slips_path params:{ menuname1: 'menuname1', menuname2: 'menuname2', file: ins_jsonpath }

    キャンセル

  • 2017/12/26 09:30

    ごめんなさい、警告が消えました! URL部分とパラメーター部分をわける必要があるんですね、基本的なことがわかっていませんでした。
    post menu_slips_path( menuname1: 'menuname1', menuname2: 'menuname2'), params: {file: ins_jsonpath }

    キャンセル

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

ただいまの回答率

91.25%

関連した質問

同じタグがついた質問を見る