9.22 振り返り  RSpecいいねのエラー>>遅延評価　「ruby標準出力(まだよくわからない)」

```
tail -f log/test.log 
```
```
tail で後方から指定した行数分表示できる  ログが見れる
```
https://qiita.com/tatsumin0206/items/d2d98b6e94dd4f70f4ce

https://qiita.com/sobameshi0901/items/b963e7046e2ae8b8e813

https://www.sejuku.net/blog/26022

```favorite.spec.rb
RSpec.describe "Staff::Favorites", type: :request do
  let(:staff){FactoryBot.create(:staff)}
  let(:ostomy){FactoryBot.create(:ostomy)}
  let(:patient){FactoryBot.create(:patient)}
  let(:favorite){FactoryBot.create(:favorite, staff: staff, ostomy: ostomy)}

  context 'ログインしている場合' do
   before do
     @staff = FactoryBot.create(:staff)
     sign_in staff
   end

   let(:ostomy_params)do
    {
    patient_id: patient.id,
    color: 'pink',
    edema: 'normal',
    skin: 'same',
    h_size: '30 ',
    w_size: '30',
    comment: 'ok',
    #image: '',
    }
    end

    describe 'PATCH /staff/ostomies/:ostomy_id/favorites' do
      it 'いいねを押す' do
        patch staff_ostomy_favorites_path(ostomy, params:{ ostomy:ostomy_params})
        # (ostomy, params:{ ostomy:ostomy_params})
        favorite.reload
      end
    end

     describe 'DELETE /staff/ostomies/:ostomy_id/favorites' do
      it 'いいね取り消す' do
        expect{
          delete staff_ostomy_favorites_path(ostomy)
         }.to change { Favorite.all.count }.by(-1)
      end
     end

    end
  end

```

```
Staff::Favorites
  ログインしている場合
    DELETE /staff/ostomies/:ostomy_id/favorites
      いいね取り消す (FAILED - 1)

Failures:

  1) Staff::Favorites ログインしている場合 DELETE /staff/ostomies/:ostomy_id/favorites いいね取り消す
     Failure/Error:
       expect{
         delete staff_ostomy_favorites_path(ostomy)
        }.to change { Favorite.all.count }.by(-1)
     
       expected `Favorite.all.count` to have changed by -1, but was changed by 0
     # ./spec/requests/staff/favorite_spec.rb:40:in `block (4 levels) in <top (required)>'

Finished in 0.37761 seconds (files took 2.17 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/requests/staff/favorite_spec.rb:39 # Staff::Favorites ログインしている場合 DELETE /staff/ostomies/:ostomy_id/favorites いいね取り消す

```

<h2>なにでエラーが出てるかわからない</h2>
p '-------------'
p Favorite.all.count

p Favorite.all.count
p '-------------'
を入れて出力させ、状態変化を見た

```favorite.spec.rb
describe 'DELETE /staff/ostomies/:ostomy_id/favorites' do
      it 'いいね取り消す' do
    p '-------------'
    p Favorite.all.count
        expect{
          delete staff_ostomy_favorites_path(ostomy)

         }.to change { Favorite.all.count }.by(-1)
       
    p Favorite.all.count
    p '-------------'
      end
```
```ruby:ターミナル
Staff::Favorites
  ログインしている場合
    DELETE /staff/ostomies/:ostomy_id/favorites
"-------------"　　　　　　　　　　　　　　　　　　　　　　　　　　←　←　←　←　←　←ここに結果が出された
0            　          　　　　←　←　←　←　←　←ここに結果が出された
      いいね取り消す (FAILED - 1)

Failures:

  1) Staff::Favorites ログインしている場合 DELETE /staff/ostomies/:ostomy_id/favorites いいね取り消す
     Failure/Error:
               expect{
                 delete staff_ostomy_favorites_path(ostomy)
       
                }.to change { Favorite.all.count }.by(-1)
     
       expected `Favorite.all.count` to have changed by -1, but was changed by 0
     # ./spec/requests/staff/favorite_spec.rb:42:in `block (4 levels) in <top (required)>'

Finished in 0.3563 seconds (files took 2.06 seconds to load)
1 example, 1 failure

Failed examples:

```
https://qiita.com/adebadayo/items/2f5618753efba7799a55

https://qiita.com/jnchito/items/42193d066bd61c740612#%E9%81%85%E5%BB%B6%E8%A9%95%E4%BE%A1%E3%81%95%E3%82%8C%E3%82%8B-let-%E3%81%A8%E4%BA%8B%E5%89%8D%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%82%8B-let

<p>let は@など使わずに済み便利な機能だが、「遅延評価される」ため
expect{〜}.to change { Favorite.all.count }が実行された時にlet(:favorite) が実行されず、レコードがデータベースに保存されないためnilを返す。</p>
<h2>before ブロックの中で明示的にlet(:favorite)をかく必要がある</h2>

```favorite.spec.rb
before do
 favorite　　# ここでデータベースにレコードを保存しておく
end
```
<h2>あるいは「　　let!　」　を使うことで、実行前に let! で定義した値が作れる　遅延をなくせる</h2>

```favorite.spec.rb
RSpec.describe "Staff::Favorites", type: :request do
  let(:staff){FactoryBot.create(:staff)}
  let(:ostomy){FactoryBot.create(:ostomy)}
  let(:patient){FactoryBot.create(:patient)}
  let!(:favorite){FactoryBot.create(:favorite, staff: staff, ostomy: ostomy)}
　　　↑↑↑ここに↑↑↑↑[!]を入れた　　let!(: )
```
```
tail -f log/test.log 
```