我想为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));
答案 0 :(得分:2)
您可以按照here中的说明在Faker中设置种子值。
播种发电机
您可能希望始终获得相同的生成数据-例如,使用Faker进行单元测试时。生成器提供了
seed()
方法,该方法为随机数生成器提供了种子。用相同的种子两次调用相同的脚本会产生相同的结果。<?php $faker = Faker\Factory::create(); $faker->seed(1234); echo $faker->name; // 'Jess Mraz I';
这将在整个测试运行中为您提供一致的结果。