

今railsでTwitterライクなwebアプリを作っていてユーザーが投稿した際にリダイレクトされるかのテストを行いたいのですが次のようなエラーが出ます。

[code]

    1) PostsController POST #create parameter is reasonable redirect user page
     Failure/Error: expect(response).to redirect_to user
    
       Expected response to be a <3XX: redirect>, but was a <200: OK>
       Response body:
    
[/code]

FactoryBotに`association :user, factory: :user`と記述を加えてみましたが、エラー文は変わりませんでした。  
また、エラーが出てるテストの一つ上の"is registered"をコメントアウトしてみたら何故かテストが通ったのですが、理由が分かりません。

以上、もし両方のテストが通る方法が分かる方がいたらよろしくお願いします。

* * *

posts_controllr_spec.rb

[code]

      describe "POST #create" do
    context "parameter is reasonable" do
      let(:valid_attributes) {
        FactoryBot.attributes_for(:post)
      }
    
      it "is registered" do
        expect {
          post :create, params: { user_id: user.id, post: valid_attributes }
        }.to change(Post, :count).by(1)
      end
    
      it "redirect user page" do
        post :create, params: { user_id: user.id, post: valid_attributes }
        expect(response).to redirect_to user
      end
    end
    
[/code]

users.rb

[code]

    FactoryBot.define do
      factory :admin_user, class: User do
        name 'Alice'
        email 'test@gmail.com'
        intro 'rubyなう'
        password 'Testtesttest'
        admin true
      end
    
      factory :user, class: User do
        name 'Bob'
        email 'test@gmail.com'
        intro 'rubyなう'
        password 'Testtesttest'
      end
    end
    
[/code]

posts.rb

[code]

    FactoryBot.define do
      factory :post, class: Post do
        content 'a' * 140
        image Rack::Test::UploadedFile.new(File.join(Rails.root, 'app/assets/images/tokyo.jpg'))
      end
    end
    
[/code]

posts_controller.rb

[code]

      def create
        @post = current_user.posts.build(post_params)
    
        if @post.save
          flash[:success] = 'succeed in posting'
          redirect_to current_user
        else
          render 'new'
        end
      end
    
[/code]

追記  
controller#saveのrender
'new'の直前で@post.errors.full_messagesの中身を調べたら次のようになっていました。

[code]

    [2] pry(#<PostsController>)> @post.errors.full_messages
    => ["Image can't be blank", "Image Failed to manipulate with rmagick, maybe it is not an image?"]
    
[/code]


CC BY-SA 4.0
2019-08-05T21:21:02.377
57186
2019-08-07T11:20:14.877
2019-08-07T11:20:14.877
35372
35372
question
ruby-on-rails ruby
1対多の関係をもつモデルをDBの保存する際のテストをrspecで書きたい