我已经注册了一个自定义的Artisan命令:
Artisan::add(new MigrateAll);
该类位于app / commands(默认位置)
然而,当我运行Behat时,我收到错误:
Class 'MigrateAll' not found
在Behat中调用Artisan来设置数据库:
/**
* @static
* @beforeSuite
*/
public static function setUpDb()
{
Artisan::call('migrate:install');
//...
}
我需要给它命名空间吗? (我找不到使用命名空间类调用Artisan :: add命令的正确方法)
答案 0 :(得分: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与其他任何框架一样需要大量其他配置。由于您尝试使用数据库组件,因此您的下一个问题就是它,因为它不会在您的测试套件中配置。
最好的方法是为Behat创建单独的bootstrap文件,该文件将继承正常引导程序中的大多数行,您需要传递必要的配置并执行此操作:
/**
* @static
* @beforeSuite
*/
public static function setUp()
{
include_once('bootstrap.php');
}
答案 1 :(得分:0)
如果您使用this tut (Laravel, BDD And You: Let’s Get Started)配置了behat环境,则在添加新命令后,您需要$ composer dump-autoload
让behat知道该命令。