121

describe, context, feature, scenario: 4 つの違いは何ですか? また、それぞれをいつ使用しますか?

4

3 に答える 3

165

はのcontextエイリアスであるためdescribe、機能的には同等です。それらは同じ意味で使用できます。唯一の違いは、spec ファイルの読み取り方法です。たとえば、テスト出力に違いはありません。RSpecの本には次のように書かれています:

describe()「私たちは物事や文脈のために使用する傾向がありcontext()ます」.

個人的には を使用するdescribeのが好きですが、人々が を好む理由がわかりcontextます。

featureおよびscenarioRSpec ではなく Capybara の一部であり、受け入れテストに使用するためのものです。featuredescribe/と同等であり、 /contextscenario同等です。itexample

Capybara で受け入れテストを作成している場合はfeature/scenario構文を使用し、そうでない場合はdescribe/it構文を使用します。

于 2012-07-26T09:04:28.867 に答える
38

今朝、いくつかの仕様を書きながら、同じ質問をしていました。普段は主に使っ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

これが一般的に受け入れられているルールかどうかはわかりませんが、このアプローチは明確で理解しやすいと思います。

于 2015-12-03T11:38:35.327 に答える