2014-09-10 29 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'); 
}