我同意:
我不应该从 Laravel 主安装运行测试。测试都应该包含在包中
为了避免在你的应用程序中安装 Laravel 并手动引导它来测试你的包,你可以使用Orchestral Testbench。
Orchestral 的文档今天非常好,但是如果你想对一些 Eloquent 模型进行单元测试,我还是会给出一个简短的示例如何使用它。
首先,确保您的包有一个ServiceProvider
类,该类指向您的迁移文件,如docs中所述。
然后,将orchestral/testbench
包放入您的包中并在tests/TestCase.php
.
该文件TestCase
应执行以下操作:
- 扩展 Orchestra 测试用例
- 指向您的服务提供商
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 进行浏览器测试。
有关更多详细信息,请查看我的博客文章。