require"minitest/reporters"Minitest::Reporters.use!classActiveSupport::TestCasefixtures:all# Log in as a particular user.deflog_in_as(user)session[:user_id]=user.idendend# Below you have to monkeypatch open up the class ActionDispatch check the link below# https://stackoverflow.com/questions/44461101/accessing-session-in-integration-testclassActionDispatch::IntegrationTest# Log in as a particular user.deflog_in_as(user,password: 'password')postlogin_path,params: {session: {email: user.email,password: password}endend
this how you would use the test-helper
classUsersEditTest<ActionDispatch::IntegrationTestdefsetup@user=users(:joe)endtest"unsuccessful edit"dolog_in_as(@user)# HERE we are using the helpergetedit_user_path(@user)# localhost:3000/users/1/edit assert_response:successpatchuser_path(@user),params: {user: {name: "",email: "invalid@invalid",password: "password",password_confirmation: "password"}}assert_redirect_toedit_user_path(@user)end
Thanks for providing such a detailed example guledali! 🙏
Did this run okay for you? It doesn't really work for me sadly, the test still thinks the user is not authenticated, perhaps I'm thinking about building the test the wrong way but have found examples similar to these.
Not sure what I'm missing here, but I don't think it is wrong to think that it's worth testing that a controller action can be accessed and ran when the user is logged in right? 🤔
I got it working now, the mistake I was doing was to add the credentials to a :sessions hash when passing them to :params, which isn't required because of how the form is structured:
# test_helper.rbENV['RAILS_ENV']||='test'require_relative"../config/environment"require"rails/test_help"classActiveSupport::TestCase# Run tests in parallel with specified workersparallelize(workers: :number_of_processors)# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.fixtures:all# Add more helper methods to be used by all tests here...defsign_in_as(user,password)postsessions_url,params: {email: user.email,password: password}endend
An example of a controller test looks like:
test"should show user"dosign_in_as(@user,'password')getuser_url(@user)assert_response:successend
The way I was doing it wrong (adding :session or :sessions):
this how you would use the test-helper
Also think this could be rewritten from
into
Thanks for providing such a detailed example guledali! 🙏
Did this run okay for you? It doesn't really work for me sadly, the test still thinks the user is not authenticated, perhaps I'm thinking about building the test the wrong way but have found examples similar to these.
Not sure what I'm missing here, but I don't think it is wrong to think that it's worth testing that a controller action can be accessed and ran when the user is logged in right? 🤔
I got it working now, the mistake I was doing was to add the credentials to a
:sessions
hash when passing them to:params
, which isn't required because of how the form is structured:An example of a controller test looks like:
The way I was doing it wrong (adding
:session
or:sessions
):