使用Behat添加自定义Artisan命令

时间:2014-09-10 11:56:12

标签: php laravel-4 behat

我已经注册了一个自定义的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命令的正确方法)

2 个答案:

答案 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知道该命令。