[英]How to avoid ThrottleRequestsException in Laravel unit test?
我正在开发一个具有日期逻辑的应用程序,即将根据日期从数据库返回某些内容,并且只应返回该日期的相关数据。 我将如何进行单元测试? 有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')]);
}
}
但是,由于尝试过多而导致此错误,是否有更好的方法来进行测试? 我正在测试将来的日期,这很麻烦,所以我将“未来日期”推入缓存中,然后使用它来做,还有更好的方法吗?
如对此类似问题的注释中所述 ,您可以通过在TestCase get
或json
调用之前应用withoutMiddleware来禁用测试中的默认Laravel速率限制。
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));
}
// circumvent the throttle rate limit middleware
// with the "withoutMiddleware" method
$response = $this->withoutMiddleware()->json('GET', '/api/data');
$response->assertJson(['date_playable' => Cache::get('data_date')]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.