dimanche 7 juillet 2019

Do MySQL database transactions break Laravel PHPUnit tests using RefreshDatabase or DatabaseTransactions?

I'm belatedly writing some PHPUnit feature tests for a project. One of these hits a number of routes which modify the database - and until now, I've been using database transactions in some of these routes.

If I use either the RefreshDatabase or DatabaseTransactions trait in my test, it fails with a strange error:

Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\Models\ClassM]

If I remove the traits (so the data will persist), the test passes.

I went through and removed all my database transactions from the relevant routes, and the test now does pass with RefreshDatabase.

My suspicion is that the problem is that MySQL doesn't support nested transactions, and both traits use transactions. But that would mean that if I want to run tests with RefreshDatabase (by far the best option!), I can't use transactions at all in my code.

Is that correct? It seems a major limitation.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire