Ini*_*igo 8 phpunit unit-testing laravel-5 laravel-dusk
我正在尝试开发一个Laravel编写器包并从中运行单元测试.在过去几天阅读各种过时且矛盾的指南和博客后,我对如何解决这个问题感到困惑.
这是我目前所知道的:
我可以让Orchestra Test Bench从给出的示例中进行一些基本测试,但我并不真正理解发生了什么,文档几乎没有解释.在测试我的应用程序的路由时,我无法获得任何工作.
我不明白Orchestra和Dusk是否可以一起玩,或者我必须在它们之间做出选择.如果是这样,我应该使用哪一个?如果它是我应该使用的Laravel Dusk,那么如何在我的包目录中运行它?
我同意:
我不应该从主要的 Laravel 安装运行测试。测试应全部包含在包中
为了避免在您的应用程序中安装 Laravel 并手动引导它来测试您的包,您可以使用Orchestral Testbench。
Orchestral 的文档今天非常好,但是如果您想对某些 Eloquent 模型进行单元测试,我还是会给出一个如何使用它的简短示例。
首先,确保您的包有一个ServiceProvider类指向您的迁移文件,如文档中所述。
然后,将orchestral/testbench包引入到你的包中,并在tests/TestCase.php.
该文件TestCase应执行以下操作:
getPackageProvidersSQLite在内存中设置数据库getEnvironmentSetUpsetUp()下面是一个例子:
<?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' => '',
]);
}
}
Run Code Online (Sandbox Code Playgroud)
并回答您的第二个问题:Laravel Dusk 与 Orchestral Testbench 配合得很好。与上面需要模拟数据库以测试 Eloquent 包模型的情况类似,您必须使用 Orchestral 模拟路由和视图才能使用 Laravel Dusk 进行浏览器测试。
有关更多详细信息,请查看我的博客文章。
这是我在开发包时所做的事情:
1) 创建一个名为 的文件夹src/tests。
2)在这个文件夹中,我遵循“正常”结构:
注意:Dusk 允许您像真实用户单击链接、填写表单等一样测试您的应用程序。测试应用程序用户界面(即使它使用 JavaScript)真的很酷。因此,如果您的软件包不包含任何接口,您可能不需要 Dusk。
3) 所有测试都使用 Laravel 的基本测试套件,因此您需要包含 Dusk 的完整 Laravel 安装(仅当您使用浏览器测试时才需要 Dusk)。
因此,对于我扩展的单元和功能测试\Tests\TestCase。
浏览器测试扩展\Tests\DuskTestCase。
4) 现在使用测试路径运行测试:
phpunit /path/to/packages/pascall/icms
Run Code Online (Sandbox Code Playgroud)
或者,对于黄昏:
php artisan dusk /path/to/packages/pascall/icms
Run Code Online (Sandbox Code Playgroud)
(或者你可以cd /path/to/packages/pascall/icms然后运行phpunit.
我从未使用过 Orchestra,因为我的团队发现此选项更简单、更容易,所以我无法帮助您。
缺点:
| 归档时间: |
|
| 查看次数: |
2150 次 |
| 最近记录: |