微妙なランダム値だとFlaky Testになったりする
ちょっと説明が足りていなかったので、補足を書きます。
Flaky Testの例
例えば、「チームにユーザーを追加できる機能」をテストしようとして、以下のようなテストを書くとする。
let(:owner) { create :user }
let!(:team) { create :team, owner: owner }
let!(:outsider) { create :user }
it '画面にチームメンバーの名前が表示されること' do
visit team_path(team)
within "#team_#{team.id} .member-list" do
expect(page).to have_text owner.name
expect(page).not_to have_text outsider.name
end
end
このテストはownerとoutsiderの名前が偶然一緒になると、テストが落ちてしまう。
ランダム値を使ったテストはこういうテストが生まれやすく・・・
とここまで書いて思ったけど、これ単に「テストコード内に書かれていない暗黙的な条件をExpectationに使うのは 」という話な気がしてきました。
やっぱりFlaky Testで困る
資料を読み直して気づきましたが、資料に記載されていた「rspec --seed
で再現できる」では解決できないです。
seedで再現できるのはテストの実行順序だけなので、Factoryのランダム値までは再現できないはず。
一番の問題はこれかな。