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 test returns always invalid argument error foreach

我试图修改它以传递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

解决方法:

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

错误告诉您在此处传递了错误的类型:

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

你必须改变它看起来像这样,它应该工作.

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...