Capybaraでselect時に同じ名称のvalueがありエラーになってしまう
RSpecでCapybaraのテストをしてたのですが、
select '東京都', from: '都道府県'
と記載している箇所で
Capybara::Ambiguous: Ambiguous match, found 2 elements matching visible option "東京都" within #<Capybara::Node::Element tag="select" path="/html/body/div/div/div[3]/div[2]/div/div/form/div[8]/select">
のようなエラーが出てしまいました。
FactoryBotの記載方法が悪かったようで、同じ東京都が2つできてしまったのですが、 改善方法としてはいくつかあります。
1点目としては
特に同じ名称でどちらも使っても問題ない場合
select '東京都', from: '都道府県', match: :first
とspecを修正することで免れることができます。 これはシンプルですね。
2点目としては FactoryBotで同じ名称を作りたく無いケース
FactoryBot.define do factory :prefecture do id 13 sequence(:name) { |n| "東京都-#{n}" }
とsequenceを利用するとnにインクリメントされた数値が代入されまwす。 このように記載すると上手く行きますね。
本質的な問題として rails_spec.rb に固定させるデータを beforeで作ってしまうというのもいいのかもしれませんが、 今回はそれ以外の対処方法を考えてみました。