繁体   English   中英

如何在Laravel单元测试中避免ThrottleRequestsException?

[英]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 getjson调用之前应用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM