Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Behat添加自定义Artisan命令_Php_Laravel 4_Behat - Fatal编程技术网

Php 使用Behat添加自定义Artisan命令

Php 使用Behat添加自定义Artisan命令,php,laravel-4,behat,Php,Laravel 4,Behat,我已注册自定义Artisan命令: Artisan::add(new MigrateAll); 类驻留在app/commands中(默认位置) 但是,当我运行Behat时,会出现以下错误: 未找到类“MigrateAll” 在Behat中调用Artisan以设置数据库: /** * @static * @beforeSuite */ public static function setUpDb() { Artisan::call('migrate:install'); //... }

我已注册自定义Artisan命令:

Artisan::add(new MigrateAll);
类驻留在app/commands中(默认位置)

但是,当我运行Behat时,会出现以下错误:
未找到类“MigrateAll”

在Behat中调用Artisan以设置数据库:

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

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

我需要给它一个名称空间吗?(我找不到使用名称空间类调用Artisan::add命令的正确方法)

这与。您的Behat测试套件在独立于应用程序的单独进程中运行,对配置一无所知。这也适用于引导中的自动加载,自动加载可能是找不到类的最可能原因。通过使用Composer自动加载您自己的源代码和供应商软件包(在您的应用程序和测试套件中),应该可以很容易地解决这个问题

将流程分离视为一条规则,并记住Laravel和其他任何框架一样,需要大量其他配置。由于您正在尝试使用数据库组件,因此下一个问题将与此相关,因为它不会在您的测试套件中配置

# composer.json
{

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

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

include __DIR__ . '../vendor/autoload.php';
最好的方法是为Behat创建单独的引导文件,该文件将继承正常引导中的大多数行,您需要在其中传递必要的配置并执行以下操作:

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

如果使用配置了behat环境,则在添加新命令后,您需要
$composer dump autoload
使behat了解该命令。

您是否尝试给它一个名称空间?是否可以添加有关注册位置和错误发生时间的更多信息?@IanBytchek添加了信息-错误发生在我运行behat时。我确定,否则您不会使用behat标记。如果不大致了解代码结构和您要实现的目标,就很难了解正在发生的事情。我想你是用这个来引导的吧?如果是这样,你能分享整个引导代码吗?什么时候在哪里叫它?在某个钩子上、某个步骤中或其他地方?@IanBytchek它唯一被调用的地方是app/start/artisan.php。我还在Behat中使用Artisan调用。但目前不是这个命令。这也许就是为什么它会掉下来。。?将更新问题。