通过重定向删除在集成测试中做奇怪的事情(测试/单元)

时间:2013-08-27 11:16:07

标签: ruby-on-rails ruby integration-testing

这是我使用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

......它过去了。

那我的测试/单元测试有什么问题?

1 个答案:

答案 0 :(得分:1)

尝试使用delete方法,然后使用follow_redirect!方法而不是delete_via_redirect。它在我的类似情况下使用patch_via_redirect方法。