相关疑难解决方法(0)

Laravel 5控制台(工匠)命令单元测试

我正在将我的Laravel 4.2应用程序迁移到5.1(从5.0开始),并且我的控制台命令单元测试很麻烦.我有工匠命令,我需要测试生成的控制台输出,正确的问题/响应处理以及与其他服务的交互(使用模拟).尽管如此,Laravel文档在测试控制台命令方面仍然是无声的.

我终于找到了一种创建这些测试的方法,但感觉就像是对那些setLaravelsetApplication调用的黑客攻击.

有一个更好的方法吗?我希望我可以将我的模拟实例添加到Laravel IoC容器中,并让它创建命令以测试所有正确设置的内容.我担心我的单元测试会在较新的Laravel版本中轻松破解.

这是我的单元测试:

使用陈述:

use Mockery as m;
use App\Console\Commands\AddClientCommand;
use Symfony\Component\Console\Tester\CommandTester;
Run Code Online (Sandbox Code Playgroud)

建立

public function setUp() {
    parent::setUp();

    $this->store = m::mock('App\Services\Store');

    $this->command = new AddClientCommand($this->store);

    // Taken from laravel/framework artisan command unit tests
    // (e.g. tests/Database/DatabaseMigrationRollbackCommandTest.php)
    $this->command->setLaravel($this->app->make('Illuminate\Contracts\Foundation\Application'));

    // Required to provide input to command questions (provides command->getHelper())
    // Taken from ??? when I first built my command tests in Laravel 4.2
    $this->command->setApplication($this->app->make('Symfony\Component\Console\Application'));
}
Run Code Online (Sandbox Code Playgroud)

输入作为命令参数提供.检查控制台输出

public function testReadCommandOutput() {
    $commandTester = new CommandTester($this->command);

    $result …
Run Code Online (Sandbox Code Playgroud)

php unit-testing laravel laravel-5 laravel-5.1

13
推荐指数
2
解决办法
2972
查看次数

使用phpunit测试Laravel(5.1)控制台命令

测试Laravel控制台命令的最佳方法是什么?

这是我正在运行的命令的示例。它在构造函数和handle方法中接受一个值。

class DoSomething extends Command
{
    protected $signature = 'app:do-something';
    protected $description = 'Does something';

    public function __construct(A $a)
    {
        ...
    }

    public function handle(B $b)
    {
        ...    
    }
}
Run Code Online (Sandbox Code Playgroud)

在测试类中,我可以模拟A和B,但是我不知道如何传入$ a。

$this->artisan('app:do-something', [$b]);
Run Code Online (Sandbox Code Playgroud)

可能吗?还是我要解决所有这些错误?我是否应该将所有事情都传递给handle()方法?

谢谢。

phpunit laravel-5

5
推荐指数
1
解决办法
1023
查看次数

标签 统计

laravel-5 ×2

laravel ×1

laravel-5.1 ×1

php ×1

phpunit ×1

unit-testing ×1