1

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

...そしてそれは通りました。

では、私のテスト/単体テストの何が問題なのですか?

4

1 に答える 1

2

delete_via_redirect の代わりに、メソッドを試してdeleteからメソッドを試してください。follow_redirect!patch_via_redirect メソッドを使用した同様のケースで機能しました。

于 2014-03-03T15:13:25.197 に答える