【发布时间】:2020-01-18 00:50:18
【问题描述】:
我正在开发一个具有日期逻辑的应用程序,即将根据日期从数据库中返回一些内容,并且只返回该日期的相关数据。我将如何进行单元测试?有 24 个日期返回 24 条不同的数据,我想也许可以这样做,
public function testGetActiveData()
{
$this->withoutExceptionHandling();
//Create the data
$dates = CarbonPeriod::create('2019-12-01', '2019-12-12');
$start_date = new Carbon("2019-12-01 00:00:00");
$dates->forEach(function($date){
$data = factory(Data::class)->create([
'date_playable' => $date->toDateTimeString()
]);
factory(LinkedData::class, 15)->create([
'data_id' => $data->id
]);
});
for($day = 1; $day <= 24; $day++) {
if($day = 1) {
Cache::put('data_date', $start_date->toDateTimeString(), now()->addMinutes(30));
} else {
Cache::put('data_date', $start_date->toDateTimeString()->addDays($day), now()->addMinutes(30));
}
$response = $this->json('GET', '/api/data');
$response->assertJson(['date_playable' => Cache::get('data_date')]);
}
}
但是由于尝试次数过多而导致此错误,是否有更好的方法来测试它?很明显,我正在测试未来的日期,所以我将“未来日期”推送到缓存中,然后使用它还有更好的方法吗?
【问题讨论】:
-
您收到的实际错误信息是什么?
-
@KoalaYeung Illuminate\Http\Exceptions\ThrottleRequestsException : 尝试次数过多。
-
尝试将
$this->json('GET', '/api/data');更改为$this->withoutMiddleware()->json('GET', '/api/data');,看看是否避免了异常。
标签: php laravel unit-testing phpunit