describe,it,contextの違い

# exapmpleグループを作成するためには`describe`と`it`はexampleを宣言する（文脈を作成）する
>## Basic Structure
RSpecは`describe`と`it`の言葉を使うので会話のような構想で表現できます
>RSpec uses the words "describe" and "it" so we can express concepts like a conversation:
```rb
"Describe an order."
"It sums the prices of its line items."
RSpec.describe Order do
  it "sums the prices of its line items" do
    order = Order.new
    order.add_entry(LineItem.new(:item => Item.new(
      :price => Money.new(1.11, :USD)
    )))
    order.add_entry(LineItem.new(:item => Item.new(
      :price => Money.new(2.22, :USD),
      :quantity => 2
    )))
    expect(order.total).to eq(Money.new(5.55, :USD))
  end
end
```
`describe`メソッドはexampleグループを作成する。`describe`へ渡されるブロック内は`it`メソッドを使ってexampleを宣言できる
>The describe method creates an ExampleGroup. Within the block passed to describe you can declare examples using the it method.

内部的には、exampleグループは`describe`へ渡されるブロックは検査されるクラスです。`it`へ渡されるブロックはそのクラスのインスタンスの文脈内で検査される。
>Under the hood, an example group is a class in which the block passed to describe is evaluated. The blocks passed to it are evaluated in the context of an instance of that class.

# `describe`か`context`で入れ子のグループを宣言できる
入れ子グループ
>## Nested Groups
`describe`か`context`を使って入れ子グループを宣言もできます
>You can also declare nested groups using the describe or context methods:
```rb
RSpec.describe Order do
  context "with no items" do
    it "behaves one way" do
      # ...
    end
  end
  context "with one item" do
    it "behaves another way" do
      # ...
    end
  end
end
```
入れ子グループは外側のexampleグループクラスのサブクラスであり、あなたが望む継承セマンティックスを無料で供給します
>Nested groups are subclasses of the outer example group class, providing the inheritance semantics you'd want for free.

https://rspec.info/documentation/3.13/rspec-core/#:~:text=main%27%0Aend-,Basic%20Structure,group%20using%20any%20of%20it%2C%20specify%2C%20or%20example.,-Shared%20Examples%20and

### セマンティックス
https://developer.mozilla.org/ja/docs/Glossary/Semantics#:~:text=%E8%A9%B3%E3%81%97%E3%81%8F%E7%9F%A5%E3%82%8B-,Semantics%20(%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9),%E3%81%82%E3%82%8B%E3%81%AE%E3%81%8B%EF%BC%9F%E3%80%8D%20(%E3%80%8C%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%A6%8B%E3%81%88%E3%82%8B%E3%81%AE%E3%81%8B%EF%BC%9F%E3%80%8D%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F)%E3%80%82,-JavaScript%20%E3%81%A7%E3%81%AE

# exampleの`context`は状況ごとに使う
エイリアス
>Aliases

`describe`または`context`のどちらか一方を使ってexampleグループを宣言できる。トップレベルexampleグループに対して、`describe`と`context`はRSpecから使用可能です。前後の互換性に対しては、モンキーパッチが使用不可でない場合、mainオブジェクトとモジュールからも使用可能です。
>You can declare example groups using either describe or context. For a top level example group, describe and context are available off of RSpec. For backwards compatibility, they are also available off of the main object and Module unless you disable monkey patching.

`it`、`specify`、`example`のいずれかを使ってグループ内でexampleを宣言できます。
>You can declare examples within a group using any of it, specify, or example.

### 条件別で使う
>context で条件別にグループ化する
RSpecには describe 以外にも context という機能でテストをグループ化することもできます。
どちらも機能的には同じですが、 context は条件を分けたりするときに使うことが多いです。
ちなみに、contextは日本語で「文脈」や「状況」の意味になります。
>
>ここでは「12歳以下の場合」と「13歳以上の場合」という二つの条件にグループ分けしてみました。

https://qiita.com/jnchito/items/42193d066bd61c740612