ファブリケータが重複した名前を生成する問題、老朽化が進んだローカルテストデータベースが原因で発生しています

テストが次のようなエラーで多数失敗しました。

 ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

そして、これが問題のようです。

  fab!(:the_group) { Fabricate(:group) }

これらは最近まで機能していました。私が取り組んでいた他のプラグインでこれを見て、ランダムな名前を自分で設定したと思いますが、これらは昨日まで機能していたはずです。

何か変更がありましたか、それとも私が何か間違ったことをしましたか?

編集:ClaudeとDiscourse Helper Botの助けを借りて、上記のfabを次のように置き換えることを試みました。

  Fabricator(:the_group) do
    name { sequence(:group_name) { |i| "Test Group #{i}" } }
  end

しかし、それをどのように行うか完全には理解できませんでした。

その後、次を使用しました。

  let(:the_group) { Fabricate(:group) }

上記の!fabの代わりに、これにより失敗の数が12から1に減少しましたが、次のようなエラーでまだ失敗しています。

  1) Pfaffmanager::ServersController servers admin can get servers owned by a group
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

昨日午前10時30分(CDT)の最後のコミット以降、これらのテストの周りで何も変更されていないと思います。

以前のコミットにロールバックしたところ、次のようなエラーが発生しました。


  1) Pfaffmanager::ServersController servers includes groups that the user is in
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

そして、何も変更せずに再度実行したところ、次のようなエラーが発生しました。

  1) Pfaffmanager::ServersController servers can update group id if group owner
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

したがって、1つのテストで失敗しており、それはランダムなようです。

「いいね!」 1

ローカルテストデータベースの状態が悪くなったのではないでしょうか?以下を実行してみてください。

RAILS_ENV=test bin/rake db:drop db:create db:migrate
「いいね!」 3

OMG。やはり、グレムリンでした。

奇妙なことに、最初の db:create ではマルチサイトデータベースが作成されませんでしたが、db:create の Rake タスクを単独で実行したところ、作成されました。そしてマイグレーションが成功し、すべてがうまく機能しました。

そして @Lilly、あなたとあなたの :eyes: には笑わせられます。

なるほど、テストデータベースを長期間保持していて、ランダムに生成された名前が以前の名前と衝突し始めたということですね。これで納得がいきました。コードのアップグレードスクリプト(git pull を実行し、all-the-plugins からコードをリフレッシュし、Ruby のバージョンを確認するなど)を、テストデータベースを削除、作成、マイグレーションするように変更しました。

「いいね!」 4

はは。まあ、君のコードスニペットをじろじろ見ていたんだ。なぜなら、それは機能するはずだと確信していたからだ:

「いいね!」 2

理論上、テストデータベースはすべてのテスト実行後に自動的にクリーンアップされるはずです。そのため、この状態になることはありません。しかし、テストプロセスが何らかの理由で異常終了した場合、クリーンアップ(技術的にはpg savepointの復元)がスキップされる可能性があると思います。

したがって、これは通常の発生状況ではありません。個人的には、奇妙な失敗が発生し始めた場合にのみ、drop/create/migrateを試す価値があると思います。

しかし、待つことに問題がなければ、テストデータベースを定期的に再作成しても害はありません :+1:

「いいね!」 3

なるほど。^cは好きです。

待つのは嫌いです。コメントアウトしておきます。覚えていることを願っています。:slight_smile:

また、この問題を突き止めてくれてありがとう。気が狂いそうでした。

「いいね!」 2

このトピックは、最後の返信から30日後に自動的にクローズされました。新しい返信は許可されていません。