代码之家  ›  专栏  ›  技术社区  ›  miken32

Factory helper不在PHPUnit设置方法中工作

  •  0
  • miken32  · 技术社区  · 6 年前

    setUpBeforeClass() 方法:

    <?php
    namespace Tests\Unit;
    use Tests\TestCase;
    use App\Location;
    class UserTests extends TestCase {
        const FAKEID = 9999999;
        public static function setUpBeforeClass() : void {
            parent::setUpBeforeClass();
            factory(Location::class)->make(["id" => self::FAKEID])->save();
        }
    }
    

    InvalidArgumentException: Unable to locate factory with name [default] [App\Location].
    

    但是工厂类的设置是正确的。事实上,如果我把同一行移到我的一个测试函数中,它就可以完美地工作。

    public function testCreateUser() {
        factory(Location::class)->make(["id" => self::FAKEID])->save();
        // do other stuff...
    }
    

    唯一让我觉得与众不同的是 它是一个静态方法,但我不知道为什么它会阻止工厂类工作。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Sven van Zoelen    6 年前

    拉雷维尔在美国做了很多准备工作 setUp() 中的方法 TestCase setUpBeforeClass() 方法,这就是为什么工厂还没有加载的原因。

    拉威尔家 setup 方法( see class

    /**
     * Setup the test environment.
     *
     * @return void
     */
    protected function setUp()
    {
        if (! $this->app) {
            $this->refreshApplication();
        }
    
        $this->setUpTraits();
    
        foreach ($this->afterApplicationCreatedCallbacks as $callback) {
            call_user_func($callback);
        }
    
        Facade::clearResolvedInstances();
        Model::setEventDispatcher($this->app['events']);
    
        $this->setUpHasRun = true;
    }
    

    更改代码以使用 setUp 取而代之的是:

    protected static function setUp() : void 
    {
        parent::setUp();
    
        factory( Location::class )->make( ["id" => self::FAKEID] )->save();
    }