私はかなり大きなRailsアプリをテストしようとしています.おそらくずっとやっていたはずですが、完全に快適ではありませんでした. 現在、ユーザーが正常に作成されるかどうかを確認する機能テストに取り組んでいます。基本的に、いくつかのことをテストしたいと思います。
- ユーザーが保存されたかどうか (つまり、DB に新しいレコードがあるかどうか)
- 彼の情報 (名前、電子メールなど) が正しいかどうか
- いくつかのフィールドがデータベースに自動的に追加されたかどうか
- メールが送信されたかどうか
- 電子メールのテキストが適切かどうか (つまり、電子メール テンプレートのユーザー名とアクティベーション リンクを代用するかどうか)
私が理解しているように、単体テストはモデルをテストするように設計されており、機能テストはコントローラーをテストする必要があります。上記のテストのいくつかは、私が見ているように、単体テストである必要があります。具体的には、入力がデータベースフィールドに正しくマップされていることと、ユーザーモデルを使用した単体テストで before_create フィルターが機能することを確認できると思います。
他の人は機能テストを要求しているようです - 電子メールが送信されるかどうか (そしておそらくそのテキスト - おそらくそれは UserEmail テストに属しますが?) と新しいレコードがあるかどうか.
これがモック/スタブに関する質問です。ユーザー コントローラーの機能テストでは、user.save が適切なパラメーターで呼び出されることを確認する必要がありますか、それとも DB が新しいレコードを取得することをテストする必要がありますか? 前者はスタブを呼び出しているようで、Rails は十分にテストされているため、ユーザー モデルで .save が呼び出された場合にオブジェクトが正常に保存されると想定しています。しかし、後者 (たとえば assert_difference の呼び出し)はより完全に感じられます。どちらを選ぶ?
これがあまりにも複雑な質問である場合は申し訳ありません-大きなトピックであることは理解していますが、このような特定の(長い場合)例を理解することで、一般的なテストについて多くのことが明確になることを願っています.
ありがとう!