【问题标题】:Faker get streetAddress throwing ErrorExceptionFaker 获取 streetAddress 抛出 ErrorException
【发布时间】:2020-06-28 20:17:03
【问题描述】:

我正在构建一个 laravel 应用程序,并且我创建了一个 FakerServiceProvider 来填充工厂以进行测试和本地开发。

<?php

namespace App\Providers;

use Faker\Factory;
use Faker\Generator;
use Faker\Provider\en_GB\Address;
use Faker\Provider\en_GB\Person;
use Faker\Provider\en_GB\PhoneNumber;
use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Support\ServiceProvider;

/**
 * Class FakerServiceProvider
 * @package App\Providers
 */
class FakerServiceProvider extends ServiceProvider implements DeferrableProvider
{
    /**
     *
     */
    public function register()
    {
        $this->app->singleton(Generator::class, function ($app) {
            $factory = Factory::create('en_GB');
            $factory->addProvider(Person::class);
            $factory->addProvider(Address::class);
            $factory->addProvider(PhoneNumber::class);

            return $factory;
        });
    }

    /**
     * @return array
     */
    public function provides()
    {
        return [Generator::class];
    }
}

我已经创建了一个地址工厂:

<?php

use App\Address;
use App\Country;

$factory->define(Address::class, function (Faker\Generator $faker) {
    return [
        'line_1' => $faker->secondaryAddress,
        'line_2' => $faker->streetAddress,
        'town' => $faker->city,
        'county' => $faker->county,
        'country_id' => factory(Country::class)->make()->id,
        'postcode' => $faker->postcode,
        'phone' => $faker->phoneNumber,
    ];
});

当我尝试使用这个工厂时,我收到以下错误: ErrorException: call_user_func_array() expects parameter 1 to be a valid callback, non-static method Faker\Provider\Address::streetAddress() should not be called statically

我查看了 Faker 库的来源,有一个 streetAddress 方法here

我已经尝试调用$faker-&gt;streetAddress 和 $faker->streetAddress()with no luck. I would expect$faker->streetAddressto produce something like ` 或类似的东西。

谁能帮我解释一下这个问题

【问题讨论】:

  • 第一个代码块的目的是什么?第二个看起来不错,我在工厂中使用streetAddress 属性没有问题。你是如何使用工厂的?
  • @miken32 它是一个服务提供者,可以向我需要的提供者注入本地化的实例伪造者
  • 嗯,这对我来说并没有让事情变得更清楚,哈哈。您可以编辑您的问题以显示您在测试中如何调用工厂吗? Composer 说安装了哪个版本的 faker?

标签: laravel factory faker


【解决方案1】:

删除 Faker Service Provider 中添加的提供程序修复了该问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多