rspecとrailsを使用して適切なテストを実装する方法を学ぶのに苦労しています。
一般的に言えば、ファイルが生成されたか、画像のサイズが適切に変更されたかなどの「ハードケース」をどのようにテストしますか?現在、ユニットテストは、データが適切に処理および出力されることを確認するのではなく、値の変換をテストするように設計されているようです。
rspecとrailsを使用して適切なテストを実装する方法を学ぶのに苦労しています。
一般的に言えば、ファイルが生成されたか、画像のサイズが適切に変更されたかなどの「ハードケース」をどのようにテストしますか?現在、ユニットテストは、データが適切に処理および出力されることを確認するのではなく、値の変換をテストするように設計されているようです。
TL;DRさまざまなツールを検討する必要があり、従来の「単体テスト」とは思えない「難しいケース」をためらわないでください。ハード ケースは、多くの場合、テスト可能です。
テストは間違いなくウサギの穴です。表面的にはとてもきれいに見えますが、実際にやってみると、うさぎの穴はかなり深くなっていきます。コードが正しいことを行っていることを確信したいのですが、あまりにも複雑で管理しにくいテストを作成したくないし、あまりにもきめの細かいテストもしたくありません。
ただし、具体的な質問については、検討したいアイデアがいくつかあります。
ファイルが生成されたことをテストするには、最初にファイルが存在しないことを確認して (ruby has File.exists?
)、何らかの方法でファイルが存在するかどうかを確認できます。「内容は合っているか」「完成したか」はもちろん、ファイルを開いて確認することもできます。
画像については、おそらく画像のプロパティを確認できる機能を見つけることができます (おそらくペーパークリップ? 使用したことはありませんが、よく知られている宝石です)。したがって、次のようなことができます(これを行うためのツールがわからないため、一種の疑似コードで):
it "resizes the image" do
img = Image.open_image("pic.png")
img[:size].should eq [100, 100]
img.close
resize_image
image = Image.open_image("pic.png")
imge[:size].should eq [25, 25]
img.close
end
テストは、多くの場合、状況をマッサージするためにますます役立つ宝石/ツールを見つけることに依存しています。「ユニット」テストは、はい、ユニットレベルのコードのみをチェックし、非常に単純かもしれませんが、常にではありません。しかしその後、ライブラリの仕様、リクエストの仕様、ルーティングの仕様、受け入れテスト、コントローラーの仕様などを調べ始めます。世の中にはたくさんのツールがあり、調査が重要です。
ただし、繰り返しますが、リストした例は、あなたが考えるような単体テストではない可能性があります。サイズ変更またはファイル生成がモデルから行われている場合、はい、それは単体テストですが、その単純なコード (アクセサーやミューテーターなど) を記述しているわけではありません。多くの場合、完全なテストに慣れていない人は、すべてがテスト可能であるとは考えませんし、そうではないかもしれませんが、いろいろ試してみると、多くの場合、そうする方法を見つけることができます。