2017-07-17 51 views
1

我正在嘗試使用模型工廠在數據提供程序中創建模型。它的工作原理,如果我的設置方法或直接在測試中使用的工廠,但如果我嘗試在數據提供程序使用它我得到一個錯誤:在PHPUnit提供程序中使用工廠失敗

1) Warning

The data provider specified for MyClassTest::testSomeMethod is invalid.

Unable to locate factory with name [default] [App\Model\User].

工廠的定義:

/** @var \Illuminate\Database\Eloquent\Factory $factory */ 
$factory->define(\App\Model\User::class, function (Faker\Generator $faker) { 
    static $password; 

    return [ 
     'id' => $faker->unique()->numberBetween(1, 10000), 
     'email_address' => $faker->unique()->safeEmail, 
     'remember_token' => str_random(10), 
     'password' => $password ?: $password = bcrypt('secret'), 
    ]; 
}); 

$factory->state(\App\Model\User::class, 'guest', function ($faker) { 
    return [ 
     'role_id' => 9999, 
    ]; 
}); 

我的工廠電話:

factory(\App\Model\User::class)->states('guest')->make(); 

是從Laravel的錯誤還是我失去了一些東西?

編輯:

一些調試後,我發現,工廠的定義不是數據提供商的呼叫之前加載,在那裏他們被稱爲(即定義)當安裝()方法被調用 - 數據之後發生提供者調用 - ,因此它無法在數據提供者中找到工廠。

因此,在我看來,在數據提供者(或測試類中的任何靜態方法)中使用工廠是不可能的。 或者我會做些什麼來定義我的數據提供者方法中的工廠!

+0

順便說一句,在laracasts中有這樣一個沒有答案的問題,[this](https://laracasts.com/discuss/channels/testing/using-factory-in-phpunit-provider-fails)和[this]( https://laracasts.com/discuss/channels/testing/unable-to-locate-factory-namedafault-in-laravel-dataprovider) – Aite

回答

0

我發現了一個不同的問題的答案(由同一問題)

所以,這個問題可以通過根據this answer, 調用數據提供方法$this->createApplication();$this->refreshApplication();或得到解決,通過調用它根據this answer

構造函數的代碼看起來像這樣

public function dataProvider() { 
    $this->refreshApplication(); // or $this->createApplication(); 
    $user = factory(\App\Model\User::class)->states('guest')->make(); 

    // ... 
    // another code to generate data .... 
    // ... 

    return $someFakeData; 
} 

我試過和工作,雖然我覺得喜歡它的解決方法,而不是如何工作,任何「更清潔」的建議,將不勝感激。

0

dd(\App\Model\User::class); 

要看看它是否返回正確的完全合格的類名,如果沒有的話那可能是你的問題。

+0

它印有「App \ Model \ User」 – Aite

+0

你有這種模式嗎?它在App \ Model命名空間中嗎? – verax

+0

感謝您的快速響應,是的,當然,我有該模型(在App \ Model命名空間中),並且它在工廠()方法從setup()或testSomeMethod()方法調用到包含數據提供者方法 – Aite

相關問題