Clean Test Code Revisedの発表内容について

微妙なランダム値だと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に使うのは :no_good_woman: 」という話な気がしてきました。

やっぱりFlaky Testで困る

資料を読み直して気づきましたが、資料に記載されていた「rspec --seed で再現できる」では解決できないです。
seedで再現できるのはテストの実行順序だけなので、Factoryのランダム値までは再現できないはず。
一番の問題はこれかな。