我刚开始编写测试,我想知道我在这里做的事是否正确。
基本上我想写一个测试来检查设置是否正确,但是我直接使用数据库中的记录。
一切正常,但是我想知道我的数据库为空怎么办?此测试将永远无法进行
那这里的最佳实践是什么?
我的测试:
/** @test */
public function settings_for_ftp_flysytem_is_correct_test()
{
$clientSettings = Client::where('category', 'ftp')->first()->settings()->get();
$this->assertArrayHasKey('host', $clientSettings);
$this->assertArrayHasKey('username', $clientSettings);
$this->assertArrayHasKey('password', $clientSettings);
$this->assertArrayHasKey('port', $clientSettings);
$this->assertArrayHasKey('root', $clientSettings);
}
答案 0 :(得分:0)
我认为最简单的解决方案是使用DatabaseTransactions特性和model factories。为每个测试用例生成测试数据总是一个好主意。
<?php
// ClientFactory.php
use Faker\Generator;
$factory::define(App\Setting::class, function (Generator $faker) {
return [...];
});
<?php
// SettingFactory.php
use Faker\Generator;
$factory::define(App\Setting::class, function (Generator $faker) {
return [...];
});
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use App\Client;
use App\Setting;
class SettingsTest extends TestCase
{
use DatabaseTransactions;
public function test_client_has_settings()
{
// 1. Arrange.
$client = factory(Client::class)->create();
$settings = factory(Setting::class, 2)->create();
$client->settings()->saveMany($settings);
// 2. Act.
$response = $this->getJson("/clients/{$client->id}/settings");
// 3. Assert.
$response->assertJson([...]);
}
}
上面的代码是一个示例。有关更多信息,请检查以下资源:Laravel Docs,Build a Forum with Laravel,Test-Driven Laravel。