影响数据库的 Laravel 测试用例 - 使用最佳实践

戴维德斯普

我的Laravel应用程序中有以下控制器

class ProjectController extends Controller {
    ...
    public function index() {
        $projects = Project::where('is_completed', false)
            ->orderBy('created_at', 'desc')
            ->withCount(['tasks' => function ($query) {
                $query->where('is_completed', false);
            }])->get();
        return response()->json($projects);
    }
    public function store(Request $request) {
        $validatedData = $request->validate([
            'name' => 'required',
            'description' => 'required',
        ]);
        $project = Project::create([
            'name' => $validatedData['name'],
            'description' => $validatedData['description'],
        ]);
        return response()->json('Project created!');
    }
    ...
}

由以下路线引用:

Route::get('projects', 'ProjectController@index');
Route::post('projects', 'ProjectController@store');

另外,我有以下测试文件:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ProjectTest extends TestCase
{
    public function testCreateProjects()
    {
        $response = $this->post(
            '/api/projects',
            [
                'name' => 'Project 01 Title',
                'description' => 'Project 01 Description',
            ]
        );
        $response = $this->post(
            '/api/projects',
            [
                'name' => 'Project 02 Title',
                'description' => 'Project 02 Description',
            ]
        );

        $response = $this->get('/api/projects');
        $data = $response->json();

        $this->assertSame(2, count($data));
    }
}

作为我使用的实时数据库:MySQL. 这是必须的。

在文件上:/.env.testing我指定了一个测试MySQL数据库,所以我不会对实时数据库进行更改。

像下面这样的文件很少:

/database/migrations/<TIMESTAMP>_create_projects_table.php

在运行以下某些命令时创建所需的表:

$ php artisan:migrate
$ php artisan:migrate --env=testing

我使用以下命令运行测试用例:

$ phpunit

只有当测试数据库为空时,上面的测试用例才能很好地工作。

然后我想知道这里运行测试用例的最佳实践是什么?,例如,也许:

  • 在运行测试用例之前清理每个表?
  • 使用另一种数据库,可能是on-the-fly数据库SQLite等(但请记住,实时数据库必须是MySQL)。

对此有什么想法吗?我正在寻找最佳实践。

谢谢!

凯博阿

您可以在内存中使用 SQLite。另一个不错的选择是使用数据库事务,您可以在每次测试后回滚查询。Laravel 提供了一个方便DatabaseTransactions的测试特性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

测试用例:使用Spring Bean模拟数据库

单元测试用例的最佳实践

Laravel数据库日志-最佳实践是什么

在测试用例类中未使用@Mock注入的Spring数据存储库是否返回null?

AbstractTransactionalTestNGSpringContextTests 测试用例更新 cassandra 数据库

使用“测试模板”(数据驱动)时每个测试用例的文档

Laravel 4.2:测试用例自动加载

使用数据库测试 Laravel 灯塔突变

如何使用Faker.js为量角器测试用例生成随机数据?

使用不同的数据多次运行同一JUnit测试用例

如何在soapUI中使用测试用例拆解脚本获取REST请求数据

如何使用UI测试用例验证UITableviewCell标签和Imageview数据

如何使用QAF中的自定义元数据过滤测试用例?

使用数据提供程序时如何动态命名测试用例

如何使用mstest或nunit将DataTable用作测试用例的数据源?

使用 KeywordDriven 从 Excel 文件中获取数据时遇到执行测试用例的问题

访问“it”“测试用例”中的夹具数据

Laravel 测试用例测试重定向到某个路由

使用Mockito的JUnit测试用例

使用python unittest的抽象测试用例

在测试用例中使用if / switch / for条件

使用eclipse模板创建测试用例

使用Mockito的测试用例执行失败

使用 Doctest 在 Python 中测试用例

使用laravel查询数据库的最佳方法

使用null和数据库时的Golang“最佳”实践

Laravel数据库查询用例

使用 Selenium UI 测试用例添加 API 测试用例

建立Mocha测试数据库连接的最佳实践和最有效方法