Update 2017-02-10:
A new assertJsonFragment()
function has been added to laravel/framework
to replace the old seeJsonContains()
function.
If you want to get your tests updated for Laravel 5.4, and need a quick patch for the missing assertJsonContains()
, here's a macro that you can place in the createApplication()
function, either in your tests/CreatesApplication.php
trait or your tests/TestCase.php
file, depending on how your test folder is setup.
TestResponse::macro('assertJsonContains',
function (array $data) {
$actual = json_encode(Arr::sortRecursive(
(array) $this->decodeResponseJson()
));
foreach (Arr::sortRecursive($data) as $key => $value) {
$expected = substr(json_encode([$key => $value]), 1, -1);
PHPUnit::assertTrue(
Str::contains($actual, $expected),
'Unable to find JSON fragment'.PHP_EOL.
"[{$expected}]".PHP_EOL.
'within'.PHP_EOL.
"[{$actual}]."
);
}
return $this;
});
You'll also want the following use statements
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use PHPUnit\Framework\Assert as PHPUnit;
use Illuminate\Foundation\Testing\TestResponse;