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