2014-09-10 76 views
1

我已經註冊了一個自定義的工匠命令:添加自定義命令工匠用貝哈特

Artisan::add(new MigrateAll); 

類駐留在應用/命令(默認位置)

然而,當我運行貝哈特我得到的錯誤: Class 'MigrateAll' not found

工匠被稱爲貝哈特用於設置DB:

/** 
* @static 
* @beforeSuite 
*/ 
public static function setUpDb() 
{ 

    Artisan::call('migrate:install'); 
//... 
} 

我需要給它一個名稱空間嗎? (我找不到用命名空間類調用Artisan :: add命令的正確方法)

+0

你試過給它命名空間嗎? – TiMESPLiNTER 2014-09-10 11:57:06

+0

您是否可以添加更多關於註冊地點和錯誤發生時間的信息? – 2014-09-10 12:54:10

+0

@IanBytchek增加了信息 - 當我運行behat時發生錯誤。 – Adamski 2014-09-10 13:10:48

回答

1

這與your earlier question有些相關。您的Behat測試套件獨立於您的應用運行在獨立的進程中,並且對配置一無所知。這也適用於引導程序中的自動加載,並且自動加載將是找不到類的最可能原因。這應該可以通過使用Composer自動加載自己的源代碼和供應商軟件包(包括在您的應用程序和您的測試套件中)來輕鬆解決。

# composer.json 
{ 

    "require": { 
     "…": "…" 
    }, 
    "autoload": { 
     "psr-0": { 
      "": "../src" 
     } 
    } 
} 

// Include composer's autoloader in your `setUp()`/bootstrap/index.php. 

include __DIR__ . '../vendor/autoload.php'; 

採取這一過程分離作爲一項規則,並記住,Laravel像任何其他框架需要一大堆其他的配置。由於您正在嘗試使用數據庫組件,因此您的下一個問題將與此相關,因爲它不會在您的測試套件中進行配置。

最好的方法是創建單獨的引導文件貝哈特,它會繼承大部分線路從您的正常引導,在那裏你需要通過必要的配置,並做到這一點:

/** 
* @static 
* @beforeSuite 
*/ 
public static function setUp() 
{ 
    include_once('bootstrap.php'); 
}