这是我使用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
带有登录文字。
也是在
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(这是最奇怪的部分)。
我用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
......它过去了。
那我的测试/单元测试有什么问题?
答案 0 :(得分:1)
尝试使用delete
方法,然后使用follow_redirect!
方法而不是delete_via_redirect。它在我的类似情况下使用patch_via_redirect方法。