4

rails-app を持っていて、cucumber/capybara/selenium-webdriver テストを高速化しようとしています。私のシナリオのほとんどは次のようになります。

@javascript
Feature: Writing reports
  In order .....

  Background:
  Given I am logged in

  Scenario: Scenario 1
    ...........
  Scenario: Scenario 2
    ...........

ほとんどの時間は、サインアップ ページに移動してユーザーを作成し、ログインする「ログインしている場合」に費やされます。認証は Devise を使用して実装されます。

テスト環境でログインする必要がまったくないようにするにはどうすればよいですか?

退屈なログイン手順を回避するための他のベスト プラクティスはありますか? (そして、ログイン/サインアップを具体的にテストするシナリオでのみログインを保持します)

4

4 に答える 4

3

あなたのキュウリのシナリオはあなたの生きている呼吸の記録です。アプリのその部分を使用するためにログインする必要がある場合は、キュウリの手順で明示的にそのように指定する必要があります。

あなたがカピバラのボンネットの下で呼んでいるものに関しては。deviseセッションコントローラーを確認し、統合テストで同じメソッド呼び出しを直接使用できます。ただし、Deviseが実装を変更すると、統合テストは失敗します。可能な場合、統合テストは、基礎となる実装の詳細に関係するべきではありません。

保守が最も簡単で、最も信頼性の高いテストは、ユーザーが行うようにフォームに入力することです。

于 2012-10-31T00:17:27.647 に答える
1

シナリオには多くの UI の詳細があります。これにより、実際に検証している動作を理解することが難しくなります。

シナリオ名はいくつかのヒントを与えてくれますが、Given/When/Then の具体的な例には、目的をわかりにくくする多くの詳細が含まれています。

Scenario: Login with invalid username/password
  Given I am signed out
  When I log in with invalid user credentials
  Then should I get an error message

Scenario: Login with valid username/password and valid PIN
  Given I am signed out
  When I log in with valid credentials
  then should I be greeted 

これら 2 つの例には、リンクまたはピン フォームに関する詳細は含まれていません。それらは、スタックにプッシュダウンする実装の詳細と見なされます。ステップが使用しているヘルパー クラスにそれらをプッシュします。Web アプリケーションを検証しているようです。これらの詳細を、手順をサポートするページ オブジェクトに保存します。

Iまた、個人的な代名詞の使用を削除し、代わりにそれをペルソナに変更することも検討します. システムのユーザーに典型的なペルソナ。ペルソナには名前があります。管理部門で働く 35 歳の女性である「Ann」というペルソナを作成するとします。これにより、シナリオを次のように書き直す機会が得られます。

Scenario: Login with invalid username/password
  Given Ann am signed out
  When Ann log in with invalid user credentials
  Then will she receive an error message

Scenario: Login with valid username/password and valid PIN
  Given Ann am signed out
  When Ann log in with valid credentials
  then should Ann be greeted 

これにより、アンが誰であるかがわかります。彼女のユーザー名とパスワードをサポート クラスに保持し、実装でそれらが適切に使用されることを期待できます。

于 2016-05-30T09:12:19.987 に答える
0

Warden (Devise が実行されている) を使用している場合は、http://blog.crowdint.com/2012/11/02/using-warden-to-login-logout-within-your-cucumber-tests.html を確認してください .

著者は、フォームに記入する代わりに Warden ヘルパーを使用する方法を提案しています。基本的には、ブラウザ経由ではなく純粋な Ruby でログインします。ログイン/ログアウト機能を具体的にテストするシナリオでは、個々のフィールドへの入力をテストしますが、これにより他のケースが高速化される可能性があります。

于 2013-03-01T22:50:20.463 に答える
0
  1. ユーザーをサインアップしないでください。ギブンUser.create!ステップの一部として。Web UI 経由でのみサインインします。

  2. 可能な限り避け@javascriptてください。sign_inこのようにして、Web UI を経由するのではなく、devise テスト ヘルパーを利用できます。

  3. より高速な JavaScript ドライバーを使用してください。たとえば、これを書いている時点で、ポルターガイストは私のマシンで Firefox の約 2 倍の速さで動作します。

于 2014-03-23T23:00:40.893 に答える