2017-09-20 5 views
0

私はレールで統合テストを書くのが初めてです。のは、私がシナリオ、capybaraセレンのシナリオごとにブラウザを開いたままにする方法(既存のセッションを使用)

  1. 管理ログの下にあるとしましょう。
  2. 新規ユーザーを作成します。
  3. 新しい役割をユーザーに割り当てます。

現在、すべてのシナリオで、新しいブラウザウィンドウが開きます(またはセッションがリセットされている可能性があります)。 ログインに関しては、第三者oauthを使用しています。ログインには膨大な時間がかかります。

私はそれぞれのシナリオでログインしたくありません。ログイン後は、何度も何度もログインを尋ねることなくシナリオを1つずつ実行する必要があります。しかし、私はどのようにrspecとセレンを使用して同じを達成するか分からない。

ご協力いただければ幸いです。

+0

他のテストケースを関数に移動し、ログイン後に1つのテストケース内で、テストケースの独立性を気にしない場合は残りの関数を1つずつ呼び出すことができます。 –

答えて

0

Seleniumは、シナリオごとに新しいブラウザウィンドウを開くべきではありませんが(特に、後のブロックでタブを閉じるのでない限り)、about:blankにリセットする必要があります。あなたの残りの要望は、フィーチャー/インテグレーションテストの意図を完全に迂回して、各テストを他のテストと完全に分離する必要があります。それぞれのテストで手動でログインしたくない場合は、使用している認証ライブラリのテストモードを使用してログインをショートカットできます。

例えば、OmniAuthを使用する場合 - 各シナリオは、セッションを維持した後https://github.com/omniauth/omniauth/wiki/Integration-Testing

+0

私は同意しますが、ブラウザを閉じずにセッションをリセットします。しかし私の場合、私はそれを望んでいません、それを防ぐ方法はありますか? –

+0

@DeepakKumarPadhy簡単にはありません。それは、あるテストが他のテストに影響を及ぼすことができるので、あなたが望むものを特に実行しません。 –

+0

カスタムJavaベースのoauthライブラリを使用していますが、そのようなテストモードはありません。 –

0

Capybara.current_session.instance_variable_set(:@touched, false)

は、上記の実行を参照。

+0

マイナーなアップデートリリースでの危険性 –

関連する問題