Rspecの before :context、before :example

#### `before`、`after`フック
>### before and after hooks
#### before,afterフックを使ってexampleの本文の前後に任意のコードを実行する
>Use before and after hooks to execute arbitrary code before and/or after the body of an example is run:
```rb
  before(:example) # run before each example:それぞれのexampleの前に実行される
  before(:context) # run one time only, before all of the examples in a group:グループにあるexampleのすべての前に一度だけ実行される
  after(:example) # run after each example
  after(:context) # run one time only, after all of the examples in a group
```
#### before、afterブロックは以下の順序で呼ばれる
>before and after blocks are called in the following order:
```
  before :suite
  before :context
  before :example
  after  :example
  after  :context
  after  :suite
```
#### 素のbeforeまたはafterフックは:exampleがデフォルトになる
>A bare before or after hook defaults to the :example scope.
#### before、afterフックは実行するexample groupで直接定義できるかグローバルなRSpec.configurブロックで定義する。注意 サンプルのステータスはフックに影響しないこと。
>before and after hooks can be defined directly in the example groups they should run in, or in a global RSpec.configure block. Note that the status of the example does not affect the hooks.

#### before(:suite)でインスタンスの引数の設定はサポートされていない
>WARNING: Setting instance variables are not supported in before(:suite).
#### Mocksはbefore(:example)で唯一サポートされていない
>WARNING: Mocks are only supported in before(:example).
#### フックの周りは、定義されたcontext関係なしでフックより前のフックには `before` が実行され、フックより後のフックには `after` が実行される。
>WARNING: around hooks will execute before any before hooks, and after any after hooks regardless of the context they were defined in.
#### `:example`と`:context`のスコープはそれぞれ`:each`と`:all`としても利用できる。あなたが気に入る方を使え
>Note: the :example and :context scopes are also available as :each and :all, respectively. Use whichever you prefer.


#### before(:example)ブロックを定義する exampleの前に実行する
>### Define before(:example) block
>Given a file named “beforeexamplespec.rb” with:
```rb
require "rspec/expectations"

class Thing
  def widgets
    @widgets ||= []
    puts "ok"
  end
end

RSpec.describe Thing do
  before(:example) do
    @thing = Thing.new
  end

  describe "initialized in before(:example)" do
    it "has 0 widgets" do
      expect(@thing.widgets.count).to eq(0)
    end

    it "can accept new widgets" do
      @thing.widgets << Object.new
    end

    it "does not share state across examples" do
      expect(@thing.widgets.count).to eq(0)
    end
  end
end
```
```
Run options: include {:full_description=>/Thing/}
ok
ok
ok
3 examples, 0 failures, 3 passed
```
#### example groupでbefore(:context)を定義する すべてのexampleのグループの前に一度だけ呼ばれる
>### Define before(:context) block in example group
>Given a file named “beforecontextspec.rb” with:
```rb
require "rspec/expectations"

class Thing
  def widgets
    @widgets ||= []
    puts "ok"
  end
end

RSpec.describe Thing do
  before(:context) do
    @thing = Thing.new
  end

  describe "initialized in before(:context)" do
    it "has 0 widgets" do
      expect(@thing.widgets.count).to eq(0)
    end

    it "can accept new widgets" do
      @thing.widgets << Object.new
    end

    it "shares state across examples" do
      expect(@thing.widgets.count).to eq(1)
    end
  end
end
```
```
Run options: include {:full_description=>/Thing/}
ok
3 examples, 0 failures, 3 passed
```