[RSpec] (feature) js: trueのテストが通ったり通らなかったり（成功・失敗を繰り返す）

#こんなfeature specを書いたのだ

```ruby:spec/features/lists_operation_spec.rb
RSpec.feature "ListsOperation", type: :feature do
  feature "create and destroy lists", js: true do
    scenario "create a list" do
      visit root_path
      expect(current_path).to eq root_path
      click_on "Create List"
      expect(current_path).to eq new_list_path
      # failed with invalid parameters
      find(".form-control").set("")
      expect do
        find(".submitBtn").click
      end.not_to change(List, :count)
      expect(current_path).to eq new_list_path
      # succeeded with valid params
      find(".form-control").set("created")

      expect do
        find(".submitBtn").click
      end.to change(List, :count).by(1)

      expect(current_path).to eq root_path
      expect(page).to have_selector "h2", text: "created"
      expect(page).to have_selector "div.lists", count: lists.count + 1
      save_screenshot
    end
  end
end
```
<br />
すると
<br />

```ruby:
ListsOperation
  create and destroy lists
Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:51883
    shows lists
    create a list
    edit a list
    delete a list

Finished in 3.49 seconds (files took 0.29178 seconds to load)
4 examples, 0 failures
```

<br />
落ちなかったり（これが正常）
<br />

```ruby:
Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:51973
    shows lists
    create a list (FAILED - 1)
    edit a list
    delete a list

Failures:

  1) ListsOperation create and destroy lists create a list
     Failure/Error:
       expect do
         find(".submitBtn").click
       end.to change(List, :count).by(1)
     
       expected `List.count` to have changed by 1, but was changed by 0
     # ./spec/features/lists_operation_spec.rb:35:in `block (3 levels) in <main>'
     # -e:1:in `<main>'

Finished in 3.34 seconds (files took 0.30711 seconds to load)
4 examples, 1 failure
```

<br />
落ちたり。。。
<br />


#調べたゾイ
参考：Rspecのフィーチャーテストが失敗したりしなかったり（StackOverFlow)
https://ja.stackoverflow.com/questions/463/rspec%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%86%E3%82%B9%E3%83%88%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%9F%E3%82%8A%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%8A
<br />
`js: trueを付けるとJSの処理が終わる前にRSpec側が先に進んでしまい、
本来通るはずのテストがパスしない、もしくはタイミングによってパスするときと失敗するときがある、
ということは僕も良く体験しています。`


#へ〜〜〜〜〜〜〜〜！！！！！！！！！！
そうなんだ。。
というわけで、該当部の下に`sleep 3`をつけて試してみる。

```ruby:spec/features/lists_operation_spec.rb
      find(".form-control").set("created")

      expect do
        find(".submitBtn").click
      end.to change(List, :count).by(1)
      
      sleep 3  #　←これ

      expect(current_path).to eq root_path
```

<br />
すると、何回繰り返しても
<br />

```ruby:
ListsOperation
  create and destroy lists
Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:51883
    shows lists
    create a list
    edit a list
    delete a list

Finished in 3.49 seconds (files took 0.29178 seconds to load)
4 examples, 0 failures
```

# Oh my goodness
素晴らしいですね。
ですが、sleep 3だと`テストに時間がかかってしまう`ので、sleep 0.5にしました。


```ruby:spec/features/lists_operation_spec.rb
      find(".form-control").set("created")

      expect do
        find(".submitBtn").click
      end.to change(List, :count).by(1)
      
      sleep 0.5  #　←3から0.5にしたゾイ

      expect(current_path).to eq root_path
```


# というわけで

無事解決！！