Rails初心者です。Railsチュートリアル13章(リスト13.63)には、最下部のようなテストコードがありますが、何度やっても解説どおりグリーン表示になりません。※リスト13.63は"FILL_IN"として、解答を入れる部分があるのですが、ここには正解をいれています。
- 問題点1.
引数 micropost: { content: "" } の部分ですが、以下のエラーがでます。
MicropostsInterfaceTest#test_micropost_interface: ArgumentError: unknown keyword: micropost
ただし、micropost: をparams:で囲って以下のようにしますと、エラーがでません。
params: { micropost: { content: "" }}
テストコードには、micropost:で始まる引数が2箇所ありますが、2箇所とも同じ現象がおきます。本番環境では問題なく動いていますし、以下サーバーのログをみても問題ないようですので、テストだけで起きるようです。
Started POST "/microposts" for 182.236.21.88 at 2018-06-22 12:45:03 +0000
Processing by MicropostsController#create as HTML
Parameters: {"utf8"=>"✓", "micropost"=>{"content"=>""}, "commit"=>"Post"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
(0.1ms) begin transaction
(0.0ms) rollback transaction
Rendering static_pages/home.html.erb within layouts/application
(0.2ms) SELECT COUNT() FROM "microposts" WHERE "microposts"."user_id" = ? [["user_id", 1]]
Rendered shared/_user_info.html.erb (2.0ms)
Rendered shared/_error_messages.html.erb (0.6ms)
Rendered shared/_micropost_form.html.erb (2.3ms)
(0.1ms) SELECT COUNT() FROM "microposts" WHERE (user_id = 1)
Micropost Load (0.3ms) SELECT "microposts".* FROM "microposts" WHERE (user_id = 1) ORDER BY "microposts"."created_at" DESC LIMIT ? OFFSET ? [["LIMIT", 30], ["OFFSET", 0]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
- 問題点2.
上と関連しているのか、以下の部分ですが、以下のエラーとなります。ここは1と関係なく、エラーがでます。
assert assigns(:micropost).picture?
NameError: undefined local variable or method `picture' for #MicropostsInterfaceTest:0x00000009e1fba0
picture?メソッドは、画像用の属性名に応じて、gem'CarrierWave'が自動的に生成してくれるメソッドです。
問題点2つとも、micropostのインスタンスに関連しているので、いろいろとあたってみたのですが、わかりませんでした。よろしくお願いいたします。
ruby
1 test "micropost interface" do 2 log_in_as(@user) 3 get root_path 4 assert_select 'div.pagination' 5 assert_select 'input[type="FILE"]' 6 # 無効な送信 7 post microposts_path, micropost: { content: "" } 8 assert_select 'div#error_explanation' 9 # 有効な送信 10 content = "This micropost really ties the room together" 11 picture = fixture_file_upload('test/fixtures/rails.png', 'image/png') 12 assert_difference 'Micropost.count', 1 do 13 post microposts_path, micropost: { content: content, picture: picture } 14 end 15 assert assign(:micropost).picture? 16 follow_redirect! 17 assert_match content, response.body 18 # 投稿を削除する 19 assert_select 'a', 'delete' 20 first_micropost = @user.microposts.paginate(page: 1).first 21 assert_difference 'Micropost.count', -1 do 22 delete micropost_path(first_micropost) 23 end 24 # 違うユーザーのプロフィールにアクセスする 25 get user_path(users(:archer)) 26 assert_select 'a', { text: 'delete', count: 0 } 27 end 28
あなたの回答
tips
プレビュー