プラグインのテストが「undefined method `test_transaction='」で失敗する

去年、プラグイン を作成し、最新の Discourse バージョンでも動作するか確認したいと考えていました。開発環境を再初期化(データベースのマイグレーションの問題があったため)したところ、手動でプラグインが正常に動作することを確認できました。しかし、昨年作成した際にも通っていた仕様テストを実行すると、以下のエラーが発生します。

Failure/Error: DB.test_transaction = ActiveRecord::Base.connection.current_transaction
      
      NoMethodError:
        undefined method `test_transaction=' for #<MiniSqlMultisiteConnection:0x00007fb8b3815c40>

また、ローカル環境に Discourse Footnote をインストールしていた場合も、同様のエラーが発生します。

現在の Discourse バージョンでテストが通過するように、環境やテストの修正方法を教えていただけますでしょうか。

テストを実行するためにどのコマンドを使用しましたか?

discourse ソースディレクトリから bin/rspec を実行する際は、plugins/ フォルダからプラグインリポジトリをシンボリックリンクしている場合でも、LOAD_PLUGINS=1 を含めるようにしてください。

discourse ディレクトリから以下のコマンドを実行しています:

d/rake plugin:spec['discourse-ruby']

@riking LOAD_PLUGINS=1 を明示的に含めていませんが、それが自動的に設定されているようです(plugin:spec を実行しているためと思われます)。コマンド実行後の最初の行は以下の通りです:

LOAD_PLUGINS=1 /usr/local/bin/ruby -S rspec ./plugins/discourse-ruby/spec/markdown_ruby_spec.rb --profile

以下のように明示的に含めても、同じエラーが発生します:

d/rake plugin:spec['discourse-ruby'] LOAD_PLUGINS=1

d/rake スクリプトはデフォルトで development 環境を指定するため、代わりに以下を実行する必要があります:RAILS_ENV=test d/rake plugin:spec['discourse-ruby']

これで動きました、ありがとうございます!