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

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

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

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

Q&A

解決済

1回答

5457閲覧

Railsのテスト中のArgumentError: unknown keywordエラーについて

Gl_ImasL

総合スコア18

Ruby on Rails

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

0グッド

0クリップ

投稿2020/02/07 08:33

編集2020/02/07 10:01

#発生している問題
Railsでのアプリケーションのテストにて、以下のような書き方をしたコードがArgumentErrorを吐いてしまいました。

#開発環境
Rails 6.0.2.1
Ruby 2.5.0
FactoryGirl 4.4.0
#DB定義
articleのDBの定義は以下です。

db

1class CreateArticles < ActiveRecord::Migration[6.0] 2 def change 3 create_table :articles do |t| 4 t.string :title, null: false #タイトル 5 t.text :body, null: false #本文 6 t.datetime :released_at, null: false #掲載開始日時 7 t.datetime :expired_at #掲載終了日時 8 t.boolean :member_only, null: false, default: false #会員のみフラグ 9 t.timestamps null: false 10 end 11 end 12end

また、test内で使用している:articleは以下のコントローラのアクションを用いて渡しています。

rb

1# 新規作成 2 def create 3 @article = Article.new(params[:article]) 4 if @article.save 5 redirected_to @article, notice: "記事を登録しました。" 6 else 7 render "new" 8 end 9 end 10 11 # 更新 12 def update 13 @article = Article.find(params[:id]) 14 @article.assigns_attributes(params[:article]) 15 if @article.save 16 redirected_to @article, notice: "記事を更新しました。" 17 else 18 render "edit" 19 end 20 end

#ソースコード

rb

1require 'test_helper' 2 3class ArticlesControllerTest < ActionController::TestCase 4 test "create" do 5 post :create, article: FactoryGirl.attributes_for(:article) 6 article = Article.order(:id).last 7 assert_redirected_to article 8 end 9 10 test "update" do 11 article = FactoryGirl.create(:article) 12 patch :update, id: article, article: FactoryGirl.attributes_for(:article) 13 assert_redirected_to article 14 end 15 16 test "fail to create" do 17 attrs = FactoryGirl.attributes_for(:article, title: "") 18 post :create, article: attrs 19 assert_response :success 20 assert_template "new" 21 end 22 23 test "fail to update" do 24 attrs = FactoryGirl.attributes_for(:article, body: "") 25 article = FactoryGirl.create(:article) 26 patch :update, id: article, article: attrs 27 assert_response :success 28 assert_template "edit" 29 end 30end

#エラーメッセージ

# Running: E Error: ArticlesControllerTest#test_fail_to_update: ArgumentError: unknown keyword: article test/controllers/articles_controller_test.rb:27:in `block in <class:ArticlesControllerTest>' rails test test/controllers/articles_controller_test.rb:24 E Error: ArticlesControllerTest#test_update: ArgumentError: unknown keyword: article test/controllers/articles_controller_test.rb:12:in `block in <class:ArticlesControllerTest>' rails test test/controllers/articles_controller_test.rb:10 ..E Error: ArticlesControllerTest#test_fail_to_create: ArgumentError: unknown keyword: article test/controllers/articles_controller_test.rb:19:in `block in <class:ArticlesControllerTest>' rails test test/controllers/articles_controller_test.rb:17 .E Error: ArticlesControllerTest#test_create: ArgumentError: unknown keyword: article test/controllers/articles_controller_test.rb:5:in `block in <class:ArticlesControllerTest>' rails test test/controllers/articles_controller_test.rb:4

#試したこと
id: articleの部分はparams : {id: article.id }と書き換えれば良いことは分かっています(こちらを参考にしました)が、article: attrsについての書き換え方が分かりません。
長くなってしまいしたが、参考にしたサイト以外で有力な情報を得られませんでしたので、こちらにて質問させて頂きます。何卒、宜しく御願い致します。

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

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

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

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

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

winterboum

2020/02/07 08:44 編集

ArticleのDB定義、FactoryGirlのArticleの定義を載せてください
guest

回答1

0

ベストアンサー

postpatcharticle: xxxx の部分を params で括ると良いかもしれません。

diff

1- post :create, article: FactoryGirl.attributes_for(:article) 2+ post :create, params { article: FactoryGirl.attributes_for(:article) }

diff

1- patch :update, id: article, article: FactoryGirl.attributes_for(:article) 2+ # もしかしたら id も括る必要があるかも 3+ patch :update, id: article, params: { article: FactoryGirl.attributes_for(:article) }

投稿2020/02/07 10:59

OgiharaRyo

総合スコア37

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

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

Gl_ImasL

2020/02/09 09:20

以下のように括ったところ、エラーがなくなりました。ありがとうございます! `patch :update, params: { id: article.id, article: FactoryGirl.attributes_for(:article) }`
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問