2016-06-08 6 views
4

Ich bekomme den obigen Fehler beim Testen meiner Anwendung mit phpunit Befehl.Laravel 5.2 - Ungültiges Argument für foreach() - mit 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); 
} 

Der vollständige Bericht Fehler ist hier:

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. 

Ich gebe zu, dass dieser Code nicht ursprünglich Mine ist - es von einem Laravel Tutorial kopiert wird. Es hat dort gut funktioniert. Leider hat mir die Antwort auf diese Frage auch nicht geholfen. Laravel 5.1 + PHPunit - API test returns always invalid argument error foreach

Ich habe versucht, es zu ändern, um einen JSON-Array als Parameter

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); 
    } 

zu passieren, aber dann habe ich diesen Fehler:

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 
+0

Haben Sie etwas in Ihrem Code basiert auf der SO Frage, die Sie verlinken auf, ändern, weil Sie den gleichen Fehler dort zu machen sind, dass das Plakat dieser Frage machte - ein Objekt eher als ein Array in 'seeJson vorbei() '. – Tex

+0

Mögliches Duplikat von [Laravel 5.1 + PHPunit - API-Test gibt immer ungültigen Argumentfehler foreach] zurück (http://stackoverflow.com/questions/31921451/laravel-5-1-phpunit-api-test-returns-always-invalid- argument-error-foreach) – Tex

+0

ja, ich habe tatsächlich verschiedene Kombinationen wie -seeJson ausprobiert (json_encode (array ('name' => ['Das Feld name ist erforderlich.']))) und vieles mehr – Andrei

Antwort

1

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

Dieser Fehler besagt, dass Sie haben hier den falschen Typ übergeben:

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

Sie müssen es ändern, um so zu sehen, und es sollte dann funktionieren.

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