InvalidArgumentException:编写单元测试时出现未知的格式化程序

Posted

技术标签:

【中文标题】InvalidArgumentException:编写单元测试时出现未知的格式化程序【英文标题】:InvalidArgumentException: Unknown formatter while writing unit tests 【发布时间】:2017-11-16 15:09:44 【问题描述】:

我正在为我们的应用程序编写 phpUnit 测试,为此我编写了一个模型工厂,之后当我尝试运行单元测试时,我收到类似“InvalidArgumentException: Unknown formatter 'publicId'“。我已经在我的模型工厂中声明了表的所有列名。工厂里的所有列都需要提吗?

ModelFactory.php

$factory->define(App\Campaign::class, function (Faker\Generator $faker) 
return [
    'public_id' => $faker->publicId,
    'client_id' => $faker->clientID,
    'name' => $faker->name,
    'criteria_age' => $faker->criteriaAge,
    'criteria_state' => $faker->criteriaState,
    'criteria_postcode' => $faker->criteriaPostcode,
    'dncr_required' => $faker->dncrRequired,
    'criteria_state' => $faker->criteriaState,
    'active' => $faker->active,
    'method' => $faker->method,
    'server_parameters' => $faker->serverParameters,
    'parameter_mapping' => $faker->parameterMapping,
];
);

\tests\Unit\Campaign\CampaignTest.php

namespace Tests\Unit\Campaign;

use App\Campaign;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class CampaignTest extends TestCase

 use DatabaseTransactions;
 public function testCampaignCreation()
 
  factory(\App\Campaign::class)->create(['name' => 'tinku']);
  $this->seeInDatabase('campaigns', ['name' => 'tinku']);
 

在运行“phpunit tests/Unit/Campaign/CampaignTest.php”后,我收到了这个错误“InvalidArgumentException: Unknown formatter 'publicId'”。我是 Laravel 的新手,我知道有一个创建工厂的程序,但我不知道。希望有人帮忙。谢谢。

【问题讨论】:

【参考方案1】:

格式化程序来自 Faker 而不是 Laravel,您只能使用 Faker 格式化程序 Faker 附带。

错误消息只是告诉您没有名为 publicId 的格式化程序。有关所有 Faker 格式化程序的列表,请参阅:https://github.com/fzaninotto/Faker#formatters

如果您将该列表与您在示例中使用的格式化程序进行比较,您会越来越明显地将格式化程序与某些数据库属性混淆,很可能是现有示例的翻译失败?但我认为您会了解得更清楚,这有望为您提供继续设置测试用例所需的信息。

【讨论】:

以上是关于InvalidArgumentException:编写单元测试时出现未知的格式化程序的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit + Selenium`InvalidArgumentException:找不到元素`

出现错误:InvalidArgumentException:无法找到名称为 [default] [App\User] 的工厂

(InvalidArgumentException(code: 0): Disk [public] 没有配置驱动程序 Voyager

Laravel:错误 InvalidArgumentException

InvalidArgumentException,“未找到视图”,在 Lumen 5.2.6 上

导入AppiumLibrary报错: ImportError: cannot import name 'InvalidArgumentException