php - 如何避免 Laravel 单元测试中的 ThrottleRequestsException?
问题描述
我正在开发一个具有日期逻辑的应用程序,即将根据日期从数据库中返回一些内容,并且只返回该日期的相关数据。我将如何进行单元测试?有 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或调用之前应用withoutMiddleware来禁用测试中的默认 Laravel 速率限制。 get
json
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')]);
}
}
推荐阅读
- jboss - 无法读取质询文件 [由 java.io.FileNotFoundException 引起:/jboss/standalone/tmp/auth/local4123__.challenge(没有这样的文件或目录)
- react-native - NativeBase:如何在 Toast 中居中文本?
- git - 用于 GIT 的 IBM DB2 解决方案
- c++ - 如何键入 UTF8 字符并转换为字节数组?
- html - 使用 flexbox 将标题与下面的内容对齐
- php - 相对于另一个数组的快速过滤
- protractor - 在 Protractor 的期望语句中使用 OR 运算符
- c++ - C ++匹配括号2解决方案不起作用
- php - 如何将详细信息和文件注册到mysql数据库中
- powershell - 我想将文本文件中的字符串匹配到 CSV 文件,如果找到匹配项,则从 CSV 的第 3 列添加