describe
, context
, feature
, scenario
: 4 つの違いは何ですか? また、それぞれをいつ使用しますか?
3 に答える
はのcontext
エイリアスであるためdescribe
、機能的には同等です。それらは同じ意味で使用できます。唯一の違いは、spec ファイルの読み取り方法です。たとえば、テスト出力に違いはありません。RSpecの本には次のように書かれています:
describe()
「私たちは物事や文脈のために使用する傾向がありcontext()
ます」.
個人的には を使用するdescribe
のが好きですが、人々が を好む理由がわかりcontext
ます。
feature
およびscenario
RSpec ではなく Capybara の一部であり、受け入れテストに使用するためのものです。feature
はdescribe
/と同等であり、 /context
とscenario
同等です。it
example
Capybara で受け入れテストを作成している場合はfeature
/scenario
構文を使用し、そうでない場合はdescribe
/it
構文を使用します。
今朝、いくつかの仕様を書きながら、同じ質問をしていました。普段は主に使っdescribe
ていて特に考えていないのですが、今朝は 1 つのモジュールに対して多くのケースと異なる仕様を扱っていたので、次にそれらの仕様を読む開発者が簡単に理解できるようにする必要がありました。それで私はこれについてGoogleに尋ねました、そして私はこれを見つけました: describe vs. context in rspec、その答えは私が非常に興味深いと思います:
rspec のソース コードによると、「context」は「describe」の単なるエイリアス メソッドであり、これら 2 つのメソッドに機能的な違いはありません。ただし、両方を使用することでテストをより理解しやすくするのに役立つコンテキスト上の違いがあります。
「記述」の目的は、1 つの機能に対して一連のテストをラップすることであり、「コンテキスト」は、同じ状態の 1 つの機能に対して一連のテストをラップすることです。
したがって、この原則に基づいて、次のような仕様を記述します。
#
# The feature/behaviour I'm currently testing
#
describe "item ordering" do
# 1st state of the feature/behaviour I'm testing
context "without a order param" do
...
end
# 2nd state of the feature/behaviour I'm testing
context "with a given order column" do
..
end
# Last state of the feature/behaviour I'm testing
context "with a given order column + reverse" do
..
end
end
これが一般的に受け入れられているルールかどうかはわかりませんが、このアプローチは明確で理解しやすいと思います。