読者です 読者をやめる 読者になる 読者になる

rspecのassigns(変数名)に値を渡す方法

rspecのcontrollerでassigns(変数名)で値を受け渡すことができると書かれたいたのに、全く値を渡すことができませんでした。

原因がわかりました。

書き方

Post controllerがあったとします

app/controllers/post_controllers.rb

def index
  @posts = Post.all
end

app/spec/factories/posts.rb

factory :post do
  body 'hoge'
end

app/spec/controllers/posts_controller.rb

it 'GET #index' do
  post = create(:post)
  get :index
  expect(:posts).to post
end

あくまでも、app/controllers/post_controllers.rb@postsを見に行っています。 ここの認識がわかっていませんでした。

まとめ

assignsがアクセスしているのは、controllerのインスタンス変数になります。