posts_controllerのindexアクションのインスタンス変数@postsのテストを行なっています。
しかし、assigns(:posts)で上手く値を渡せず?中身が空の配列になっておりテストが通りません。
初歩的なことかもしれませんが何が起きているかさっぱりわからず困っています。
何か心当たりなどありましたらご教授お願いいたします。
現在の状態でテストを走らせると表示されるエラーメッセージ
1) PostsController#index created_at ascで並べ替えられたpostの配列 Failure/Error: expect(assigns(:posts)).to match(posts.sort{|a, b| a.created_at <=> b.created_at }) expected #<ActiveRecord::Relation []> to match [#<Post id: 235, title: "松田", address: "東京駅", image: "sample_image.jpg", content: "aaaaaaaaaaaaaaa", user_id: 347, created_at: "2020-01-05 20:52:44", updated_at: "2020-01-07 17:44:33", latitude: 35.6806303, longitude: 139.7687578>, #<Post id: 233, title: "杉山", address: "東京駅", image: "sample_image.jpg", content: "aaaaaaaaaaaaaaa", user_id: 345, created_at: "2020-01-05 22:52:05", updated_at: "2020-01-07 17:44:30", latitude: 35.6806303, longitude: 139.7687578>, #<Post id: 234, title: "池田", address: "東京駅", image: "sample_image.jpg", content: "aaaaaaaaaaaaaaa", user_id: 346, created_at: "2020-01-06 00:17:40", updated_at: "2020-01-07 17:44:32", latitude: 35.6806303, longitude: 139.7687578>] Diff: @@ -1,4 +1,2 @@ -[#<Post id: 235, title: "松田", address: "東京駅", image: "sample_image.jpg", content: "aaaaaaaaaaaaaaa", user_id: 347, created_at: "2020-01-05 20:52:44", updated_at: "2020-01-07 17:44:33", latitude: 35.6806303, longitude: 139.7687578>, - #<Post id: 233, title: "杉山", address: "東京駅", image: "sample_image.jpg", content: "aaaaaaaaaaaaaaa", user_id: 345, created_at: "2020-01-05 22:52:05", updated_at: "2020-01-07 17:44:30", latitude: 35.6806303, longitude: 139.7687578>, - #<Post id: 234, title: "池田", address: "東京駅", image: "sample_image.jpg", content: "aaaaaaaaaaaaaaa", user_id: 346, created_at: "2020-01-06 00:17:40", updated_at: "2020-01-07 17:44:32", latitude: 35.6806303, longitude: 139.7687578>] +[] # ./spec/controllers/posts_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
binding.pryでassigns(:posts)を確認
8: 9: describe '#index' do 10: 11: it "created_at ascで並べ替えられたpostの配列" do 12: get :index => 13: binding.pry 14: expect(assigns(:posts)).to match_array posts 15: end 16: 17: 18: [1] pry(#<RSpec::ExampleGroups::PostsController::Index>)> assigns(:posts) => []
posts_controller_spec.rb
require 'rails_helper' describe PostsController do let(:user) { create(:user) } let(:posts) { create_list(:post, 3) } describe '#index' do it "created_at ascで並べ替えられたpostの配列" do get :index expect(assigns(:posts)).to match(posts.sort{|a, b| a.created_at <=> b.created_at }) end end end
posts_controller.rb
def index @posts = Post.all.order("created_at asc").page(params[:page]).per(12) end
spec/factories/posts.rb
FactoryBot.define do factory :post do title {Faker::Name.last_name} address {'東京駅'} image { Rack::Test::UploadedFile.new(Rails.root.join('spec/support/sample_image.jpg'), 'image/jpeg') } content {'aaaaaaaaaaaaaaa'} latitude {35.6959} longitude {139.702} created_at { Faker::Time.between(from: DateTime.now - 2, to: DateTime.now) } user end end
環境
Rails 5.0.7.2
ruby 2.5.1
rspec-rails (3.9.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/08 05:17