php - Laravel 4.1 - 使用 Phpunit 和 Mockery 测试 Artisan 命令

标签 php testing laravel mockery

我正在 Laravel 4.1 中编写我的第一个 Artisan 命令,想获得一些关于如何测试它的想法。我的命令只做一件事(目前)。它基本上从数据库中删除指定天数的表条目(注释)。


命令示例:

OneTimeNote:delete --days=25

该命令效果极佳。但我首先出于学习目的编写了命令,现在我希望通过测试来遵循它。我正在使用 PHPUnit 和 Mockery。


命令代码: http://pastebin.com/index/dZrxpt8x

如您所见,我正在注入(inject)我的 Note 实现(用于抽象),然后我正在执行它的方法之一“deleteNotesOlderThan(int $days)”。就像我说的,这一切都很好而且花花公子。当我尝试测试这个东西时,我的问题就开始了。


命令测试:http://pastebin.com/6UwxGvcN

如果您查看代码,您就会明白我卡在哪里了。如何模拟我的 Note 方法并生成命令测试?另外,我应该用这个特定的命令测试什么样的东西?

提前致谢

最佳答案

我的建议是遵循 Laravel 中为您提供的示例。

从框架中随机选择一个 artisan 测试,看起来您不需要 Symfony 的“CommandTester”类,而是您只需实例化即可。

来自 https://github.com/laravel/framework/blob/master/tests/Foundation/FoundationConfigPublishCommandTest.php :(链接可能会过时)

public function testCommandCallsPublisherWithProperPackageName()
{
    $command = new Illuminate\Foundation\Console\ConfigPublishCommand($pub = m::mock('Illuminate\Foundation\ConfigPublisher'));
    $pub->shouldReceive('publishPackage')->once()->with('foo');
    $command->run(new Symfony\Component\Console\Input\ArrayInput(array('package' => 'foo')), new Symfony\Component\Console\Output\NullOutput);
}

所以你实例化你的命令,传入你的模拟存储库接口(interface),将你的期望添加到模拟中,然后在命令上调用 run,传入“假”输入和输出类。

关于php - Laravel 4.1 - 使用 Phpunit 和 Mockery 测试 Artisan 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913211/

相关文章:

php - Laravel 查询生成器选择具有不同条件的同一表同一列

php - Codeigniter - 重命名 Controller 301 重定向旧 url

php - 如何修复:SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

php - Route.php 中的 ReflectionException 第 281 行 : Function () does not exist

php - MySQL 查询返回后页面不会加载?

php - doctrine2 使用过多的 SQL 查询加载一对多关联

java - 在我的测试应用程序中缺少要测试的目标类

android - uiatomator包smack不存在报错

Ruby 与法拉第 stub ,无法让它工作

laravel - Angular2 尝试将图像上传到 Lumen 后端时出错