I'm coming back to the question regarding how to set up cookies values and
read in RSpec controllers spec.
So following the Michael Hartl's Rails Tutorial
<http://www.railstutorial.org/book>, I tries to write a controller spec.
Michael still uses 'the old' way and put controllers specs in requests
folder and requires Capybara in spec_helper:
#config.include Capybara::DSL
I commented the above line as Capybara DSL will be used in features specs
and will be loaded without problems.
So, I'd like just to set in some way cookies.permanent and do it in a
separate module (spec/support:/login_macros.rb):
module LoginMacros
def set_admin_session(admin)
cookies.permanent['remember_token'] = admin.remember_token
end
end
Then I included the module in spec_helper:
config.include LoginMacros
In my ClientsControllerSpec:
describe ClientsController do
let(:admin) { create(:admin) }
before { set_admin_session(admin) }
describe 'GET #index' do
it "populates an array of all clients" do
clients = []
3.times do
clients << create(:client)
end
get :index
expect(assigns(:clients)).to match_array(clients)
end
end
end
ClientController:
class ClientsController < ApplicationController
before_action :signed_in_user
def index
@clients = Client.paginate(page: params[:page])
end
end
Here is 'signed_in_user' method in SessionsHelper:
module SessionsHelper
def sign_in(user)
remember_token = Admin.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, Admin.digest(remember_token))
self.current_user = user
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_path, notice: t(:sign_in_required)
end
end
end
Here are the errors when running the specs:
ClientsController
GET #index
populates an array of all clients (FAILED - 1)
renders the :index template (FAILED - 2)
Failures:
1) ClientsController GET #index populates an array of all clients
Failure/Error: expect(assigns(:clients)).to match_array(clients)
expected an array, actual collection was nil
# ./spec/controllers/clients_controller_spec.rb:16:in `block (3
levels) in <top (required)>'
2) ClientsController GET #index renders the :index template
Failure/Error: expect(response).to render_template :index
expecting <"index"> but rendering with <[]>
# ./spec/controllers/clients_controller_spec.rb:21:in `block (3
levels) in <top (required)>'
What is wrong here ? Why cookies are not set correctly ?
Thank you.
--
You received this message because you are subscribed to the Google Groups
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rspec/a5eebc3d-482a-4ea9-92bf-9c3558307574%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.