letとlet!の違い

letは遅延評価をされる習性があり、変数として使用されてやっと中身が実行される。

```
let(:user_article) { create(:article, user_id: user.id) }
・・・
expect(user.articles.first).to eq user_article
```

上の記述の場合、eqの左側で`article`が使われているが`let`で変数化される前のものだが、eqの右側で変数が呼び出されるので別の値になる。

しかし、ここで`let`の部分を`let!`にすると変数の呼び出し関係なしにcreateされているので、値は等しくなる。

### `let!`と`before`は同じタイミング

```
before { create(:user) }
let!(:user_article) { create(:article, user_id: user.id) }
before { create(:user_2) }
```

上から順番に行われる。