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
そして結果:
1) Failure:
UserFlowsTest#test_signin_and_signout
Expected at least 1 element matching "h1", found 0..
Expected 0 to be >= 1.
get signin_path
最初にわかるようにh1
、サインイン テキストを取得した後です。
アフター
もOKです
delete_via_redirect signout_path
。
しかし、何も見つかりません。
さらに、この時点でまだ真実で
あることを確認しました。
assert_equal signin_path, path
assert_select 'h1'
h1
assert_select 'a#signout', 'Sign Out'
私の方法:
def destroy
sign_out
redirect_to signin_url
end
def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end
メソッドによってdestroy
にリダイレクトされましたがsignin_url
、まだサインアウト リンクがあり、h1 がありません (これが最も奇妙な部分です)。
カピバラでテストしました:
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
...そしてそれは通りました。
では、私のテスト/単体テストの何が問題なのですか?