Slide 41
Slide 41 text
protected function assertSqlQueries(string $expectedQueries, string $msg = ''): void
{
$expectedQueries = trim($expectedQueries);
$actualQueries = trim(
implode("\n",
array_map(
function (QueryExecuted $query): string {
// Replace any numeric literals with "fake" bind
// placeholders. The framework recently optimized
// whereIn queries to contain all-only integer
// literals directly, which means it includes
// IDs which may change during multiple test
// runs, which we now manually need to normalize
return preg_replace(
[
// Covers integers in `WHERE IN ()`
'/\d+(,|\))/',
// Covers simple `WHERE x =`
'/= \d+/',
],
[
'?$1',
'= ?',
],
$query->sql) . ';';
},
$this->sqlQueryEvents
)
)
);
$this->sqlCounterReset();
if (!$msg) {
$msg = 'SQL queries mismatch';
}
$this->assertSame($expectedQueries, $actualQueries, $msg);
}