0

いくつかの操作に使用する統合テスト中にユーザーを作成しようとしています。:confirmable でデバイスを使用しています。コードは次のとおりです。

user = User.create({username: "user1", password: "pass1234", password_confirmation: "pass1234", email: "test@email.com"})
user.confirm!
fill_in "Username", :with => user.username
fill_in "Password", :with => user.password
click_button "Sign in"

問題は、ログインしようとするたびに失敗することです。ユーザーの作成にエラーはありませんが、何らかの理由で、ログインしようとするとユーザーが「そこにいる」ようには見えません。サインインしようとすると、「無効なユーザー名またはパスワード」が表示されます。これは、Capybara/Selenium webdriver がサインインを試行する前にデータベース操作が行われるのを適切に待機していない可能性があるという事実と関係があるようです。その場合、どうすればテストまたは修正できますか?

統合テスト中にデータベースに挿入しようとするのは「間違っている」のでしょうか?

4

1 に答える 1

1

私自身はdeviseを使用していないため、発生している問題の詳細についてコメントすることはできませんが、次の質問が私の目に留まりました。

統合テスト中にデータベースに挿入しようとするのは「間違っている」のでしょうか?

はい、一般的にはそうだと思います。

統合テストでは、ユーザーの観点からコードをテストする必要があります。

  • 期待は、ユーザーが実際に見ることができるものにのみ依存する必要があります。
  • アクションは、ユーザーが実際に実行できることのみに対応する必要があります

データベースに何かを挿入することは、ユーザーが自由にできるアクションの範囲を超えています。おそらく単体テスト用ですが、統合テスト用ではありません。

そうは言っても、テストのコンテキストを設定しているので、データベース データのシードはこのルールの例外であると主張することができます (下記の私のコメントを参照してください)。

于 2012-11-29T04:13:20.893 に答える