在laravel中使用Faker时,如何测试API调用的结果?

chr*_*423 2 php testing faker laravel laravel-5

我想在 Laravel 中为 API 调用编写测试。我创建了一个模型工厂来为我的测试数据库设置种子,以便 API 调用可以返回一些东西。在模型工厂内部,我使用 Faker 为模型属性生成随机数据。我在测试开始时使用这个工厂,所以数据是在运行时创建的。

如何测试 API 调用的结果?问题是在每次执行测试期间,由于随机生成的数据,API 调用可能返回不同的结果。所以我不能只是将 API 调用的结果保存在 .json 文件中,并将其与测试中 API 调用的实际结果进行比较。

我知道该seeJsonStructure()方法(https://laravel.com/docs/5.3/application-testing#verifying-structural-match)但我不想使用它。

所以这是我目前的尝试,但不起作用:

$cars = factory(Car::class)->times(2)->create();

$this->json('GET', '/api/cars');

$expected = File::get('cars.json');

$this->seeJson((array) json_decode($expected));
Run Code Online (Sandbox Code Playgroud)

Cal*_*pin 5

您可以按照此处所述在 Faker 中设置种子值。

播种发电机

您可能希望始终获得相同的生成数据——例如,当使用 Faker 进行单元测试时。生成器提供了一种seed()方法,该方法为随机数生成器提供种子。使用相同的种子调用相同的脚本两次会产生相同的结果。

<?php
$faker = Faker\Factory::create();
$faker->seed(1234);

echo $faker->name; // 'Jess Mraz I';
Run Code Online (Sandbox Code Playgroud)

这将在测试运行中为您提供一致的结果。