【问题标题】:Invalid Argument Exception - Laravel Unit Testing无效参数异常 - Laravel 单元测试
【发布时间】:2019-09-27 07:06:15
【问题描述】:

我正在运行一个单元测试来检查

  1. 查看页面存在
  2. AssertSee 文本显示在页面上并带有字符串限制

我得到一个无效的参数异常:

1) Tests\Feature\ViewAllPostTest::testCanViewAllPosts
InvalidArgumentException: You requested 1 items, but there are only 0 items available.

C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Support\Arr.php:472
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Support\Collection.php:1486
C:\projects\car-torque-laravel\database\factories\PostFactory.php:12
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:274
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:292
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\GuardsAttributes.php:122
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:300
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:219
C:\projects\car-torque-laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:178
C:\projects\car-torque-laravel\tests\Feature\ViewAllPostTest.php:19

我的源码如下:

测试功能

namespace Tests\Feature;

use App\Post;
use Tests\TestCase;

class ViewAllPostTest extends TestCase
{

    /**
     * @group posts
     *
     * @return void
     */
    public function testCanViewAllPosts()
    {
        //arrange
        $post = factory(Post::class)->create();

        //action
        $response = $this->get('/posts');

        //assert
        $response->assertStatus(200);
        $response->assertSee($post->body);
        $response->assertSee(str_limit($post->body));

    }
}

工厂类

use App\Post;
use App\User;
use Faker\Generator as Faker;

$factory->define(Post::class, function (Faker $faker) {
    return [
        'body' => $faker->text,
        'user_id' => User::all()->random()->id,
        'created_at' => now(),
        'updated_at' => now(),
    ];
});

【问题讨论】:

    标签: laravel phpunit factory


    【解决方案1】:

    'user_id' => User::all()->random()->id,

    在您工厂的上述行中,您希望用户表中的随机 id。但是您是否在运行测试之前创建了任何用户。在使用 post factory 创建帖子之前,至少应该创建一个用户。

    【讨论】:

    • 感谢您的意见,非常感谢 Imran
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多