Symfony5.3 + hautelook/alice-bundleの組み合わせで RefreshDatabaseTrait
を利用してテストを書いてたんですが、sentry-symfonyを導入してテストを実行したらエラーが大量に発生しました。
エラーを確認してみると以下のTRUNCATE TABLEできないとエラーが出てました。
|
|
なぜエラーになったのか?
使っているDatabaseはMySQLときは、AliceBundle側でFixtureを挿入するときに SET FOREIGN_KEY_CHECKS = 0;
を設定してくれるんですが、どうやらそれが実行されないことが原因のようでした。
どこで SET FOREIGN_KEY_CHECKS = 0;
を実行しているかというと、theofidry/alice-data-fixturesのPurger::purge()の部分でした。
以下のコードで $disableFkChecks
の値がsentry-symfonyを導入していると false
になってしまい SET FOREIGN_KEY_CHECKS = 0;
が設定できなかったということでした。
|
|
なぜ $disableFkChecks が trueにならないのか?
調べてみたところ $this->purger->getObjectManager()->getConnection()->getDriver()
ここで取得しているDBのDriverがAbstractMySQLDriverではなく、
Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverが入っていたために、$disableFkChecksがfalseになっていました。
どう対処するべきか?
そもそもTestではSentryは必要ないので、tracingの設定をfalseにすることで対応しました。
config/packages/test/sentry.yaml
|
|
これでTRUNCATE TABLEが無事に実行でき、エラーがになりません。