Unit testing Laravel 5.4;如何从Laravel包运行单元测试?
我正在尝试开发一个Laravel composer包,并在其中运行单元测试。在过去的几天里,我阅读了各种过时的、相互矛盾的指南和博客文章,我完全不知道该怎么做 以下是我目前所知道的:Unit testing Laravel 5.4;如何从Laravel包运行单元测试?,unit-testing,laravel-5,phpunit,laravel-dusk,Unit Testing,Laravel 5,Phpunit,Laravel Dusk,我正在尝试开发一个Laravel composer包,并在其中运行单元测试。在过去的几天里,我阅读了各种过时的、相互矛盾的指南和博客文章,我完全不知道该怎么做 以下是我目前所知道的: 我不应该从主Laravel安装运行测试。所有测试都应包含在包中。我承认这是有一定道理的 有一种叫做。如果你正在开发一个Laravel软件包,那么显然你应该使用这个 还有一个叫做,它包含在Laravel 5.4中 我可以让管弦乐队的测试台进行一些基本的测试,但我不太明白到底发生了什么,文档几乎什么也解释不了。当涉
- 我不应该从主Laravel安装运行测试。所有测试都应包含在包中。我承认这是有一定道理的
- 有一种叫做。如果你正在开发一个Laravel软件包,那么显然你应该使用这个
- 还有一个叫做,它包含在Laravel 5.4中
如果我应该使用的是Laravel Dusk,那么如何从包目录中运行它?以下是我在开发包时的操作: 1) 创建名为
src/tests
的文件夹
2) 在此文件夹中,我遵循“正常”结构:
- 用于单元测试的单元文件夹
- 功能文件夹
- 用于使用Laravel Dusk运行测试的浏览器文件夹(用于端到端测试)
- 因此,对于单元和特性测试,我扩展了
\tests\TestCase
- 浏览器测试扩展
\tests\testcase
phpunit /path/to/packages/pascall/icms
或者,对于黄昏:
php artisan dusk /path/to/packages/pascall/icms
(或者您可以cd/path/to/packages/pascall/icms
,然后运行phpunit
)
我从来没有使用过乐队,因为我的团队发现这个选项更简单、更直接,所以我不能帮你
缺点:
- 黄昏测试失败将出现在默认的Laravel黄昏屏幕截图文件夹中(对我们来说,这很好,所以我们没有花时间研究)
- 我同意:
我不应该从主Laravel安装运行测试。所有测试都应该包含在包中
为了避免在应用程序中安装Laravel并手动引导它来测试软件包,您可以使用
今天,管弦乐队的文档非常好,但如果你想在一些有说服力的模型上进行单元测试,我将给出一个如何使用它的简短示例
首先,确保包中有一个指向迁移文件的
ServiceProvider
类,如中所述
然后,要求将orchestral/testbench
包放入包中,并在tests/TestCase.php
中创建一个文件
文件TestCase
应执行以下操作:
- 扩展测试用例
- 使用
getPackageProviders
- 使用
getEnvironmentSetUp
- 运行migrate在
setUp()中创建表
<?php
namespace MyVendorName\MyPackageName\Tests;
use MyVendorName\MyPackageName\MyServiceProvider;
class TestCase extends \Orchestra\Testbench\TestCase
{
public function setUp(): void
{
parent::setUp();
$this->artisan('migrate', ['--database' => 'testbench'])->run();
}
/**
* add the package provider
*
* @param $app
* @return array
*/
protected function getPackageProviders($app)
{
return [MyServiceProvider::class];
}
/**
* Define environment setup.
*
* @param \Illuminate\Foundation\Application $app
* @return void
*/
protected function getEnvironmentSetUp($app)
{
// Setup default database to use sqlite :memory:
$app['config']->set('database.default', 'testbench');
$app['config']->set('database.connections.testbench', [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
]);
}
}
你能告诉我们你的软件包是做什么的吗?如果它是一个composer插件,我怀疑你会需要Dash,因为它的目的是通过UI层对你的应用程序进行功能测试。这听起来不像是你想要的。我不知道Testbench,但它看起来更像你可能需要的,但坦率地说,我会从简单的ph开始punit和laravel提供的一些测试特性。这是一个内容管理系统,也使用Angular JS 4。我使用Angular的测试套件来测试所有UI内容。用于编写路由测试的Dash代码看起来很好,很简单,希望用它来测试API路由。我还需要能够测试数据库查询等o我真的需要使用Laravel的一个实例。那么你想在Dash中使用Laravel?你正在测试完全不同的应用程序?这可以通过更改Dash的访问URL来完成。@hasandz不,我正在测试一个我正在开发的包,它位于主应用程序/Laravel安装的子目录中。我想从这个目录运行我的测试,这样我的所有包组件都捆绑在一起,我不需要污染主应用程序——我相信这是推荐的协议。让我们检查phpunit和Dusk。只需运行php vendor/bin/phpunit
,它就可以运行单元测试和Dusk测试。如果你只想运行Dusk测试,你可以使用它php artisan dusk
。这些命令有错误吗?那么我如何配置testbench,使viiews目录指向我的包中的一个目录?@JunaidQadir这样说:谢谢代码链接。我实际上是想写resources
目录。让我看看我想要指向的/vendor/chestration/testbench core/laravel/re源到我的包资源路径。