Laravel 5.2 - Недопустимый аргумент, предоставленный для foreach() - с помощью phpunit


Я получаю вышеуказанную ошибку при тестировании своего приложения с помощью команды phpunit.

public function testProductCreationFailsWhenNameNotProvided()
{
    $product = factory(\App\Product::class)->make(['name' => '']);

    $this->post(route('api.products.store'), $product->jsonSerialize())
        ->seeJson(['name' => ['The name field is required.']]) /*line 86*/
        ->assertResponseStatus(422);
}

Полный отчет об ошибке находится здесь:

There was 1 error:
1) ExampleTest::testProductCreationFailsWhenNameNotProvided
ErrorException: Invalid argument supplied for foreach()
C:\xampp\htdocs\product-  service\vendor\laravel\framework\src\Illuminate\Support\Arr.php:494
C:\xampp\htdocs\product-service\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:231
C:\xampp\htdocs\product-service\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:257
C:\xampp\htdocs\product-service\tests\ExampleTest.php:86
C:\xampp\php\pear\PHPUnit\TextUI\Command.php:176
C:\xampp\php\pear\PHPUnit\TextUI\Command.php:129
FAILURES!
Tests: 7, Assertions: 43, Errors: 1.

Признаюсь, что этот код изначально не мой - он скопирован из учебника Laravel. Там это прекрасно работало. К сожалению, ответ на этот связанный с этим вопрос мне тоже не помог. Laravel 5.1 + PHPUnit - тест API всегда возвращает ошибку недопустимого аргумента для каждого

Я попытался изменить его, чтобы передать массив json в качестве параметр

public function testProductCreationFailsWhenNameNotProvided()
    {
        $product = factory(\App\Product::class)->make(['name' => '']);

        $this->post(route('api.products.store'), $product->jsonSerialize())
            ->seeJson(json_encode(array('name' => ['The name field is required.'])))
            ->assertResponseStatus(422);
    }

Но потом я получил эту ошибку:

1) ExampleTest::testProductCreationFailsWhenNameNotProvided
TypeError: Argument 1 passed to Illuminate\Foundation\Testing\TestCase::seeJson() must be of the type array, string given, called in C:\xampp\htdocs\product-service\tests\ExampleTest.php on line 86
Author: Andrei, 2016-06-09

1 answers

1)Exampletest::testproductcreationфайлы, которые не были предоставлены Ошибка типа: Аргумент 1, переданный для Illuminate\Foundation\Testing\TestCase::Seejson() должен иметь тип массива, заданный строкой, вызываемый в C:\xampp\htdocs\product-service\tests\ExampleTest.php в строке 86

Эта ошибка указывает на то, что вы неправильно ввели здесь тип:

->seeJson(json_encode(array('name' => ['The name field is required.'])))

Вы должны изменить его, чтобы он выглядел так, и тогда он должен работать.

->seeJson(array('name' => ['The name field is required.']))
 1
Author: Andrey Degtyaruk, 2016-09-12 02:14:17