Here is my test using Test/Unit:
test "signin and signout" do
user = users(:alex)
get signin_path
assert_select 'h1', 'Sign In'
# signing in...
post_via_redirect signin_path,
email: user.email,
password: strong_pass
assert_select 'a#current-user', "#{user.first_name} #{user.last_name}"
assert_select 'a#signout', 'Sign Out'
#signing out...
delete_via_redirect signout_path
assert_equal signin_path, path
assert_select 'h1', 'Sign In'
assert_select 'a#signin', 'Sign In'
end
And the result:
1) Failure:
UserFlowsTest#test_signin_and_signout
Expected at least 1 element matching "h1", found 0..
Expected 0 to be >= 1.
As you can see in the begining after get signin_path
I have my h1
with signin text.
Also after
delete_via_redirect signout_path
my
assert_equal signin_path, path
is also ok.
But assert_select 'h1'
can't find any h1
.
And moreover I checked that
assert_select 'a#signout', 'Sign Out'
at this point is still true.
My methods:
def destroy
sign_out
redirect_to signin_url
end
def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end
So method destroy
redirected me to signin_url
, but I still have signout-link and don't have any h1 (it's the most strange part).
I tested it with Capybara:
test "sign_out link" do
user = users(:alex)
sign_in user, capybara: true
assert page.has_link?('Sign Out', href: signout_path)
click_link 'Sign Out'
assert page.has_selector?('h1', text: 'Sign In')
end
... and it passed.
So what's wrong with my test/unit test?