ActiveRecord::Fixtures.create_fixtures は普通 db/seeds.rb とかで使う。その時は問題ない。ただなぜか「一回ロードしたテーブルを記憶しておいて二回目はロードしない」仕組みになっているため、テストなどで何回も使うと「なんかテーブルにデータ入らないんだけど…」ということになる。
解決法
ActiveRecord::Fixtures.reset_cache を使う。例えば下記のようにすればテスト中で毎回 fixtures からデータを持ってこれます。
# ... before do ActiveRecord::Fixtures.reset_cache ActiveRecord::Fixtures.create_fixtures(Rails.root.join('db'), "users") end #...
なんでこんな仕組みになってるんだろ。