#発生している問題
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
についての書き換え方が分かりません。
長くなってしまいしたが、参考にしたサイト以外で有力な情報を得られませんでしたので、こちらにて質問させて頂きます。何卒、宜しく御願い致します。
回答1件
あなたの回答
tips
プレビュー