Home > Backend Development > PHP Tutorial > Freezing Time: Testing Laravel Temporary Storage URLs

Freezing Time: Testing Laravel Temporary Storage URLs

DDD
Release: 2025-01-28 20:04:13
Original
224 people have browsed it

Freezing Time: Testing Laravel Temporary Storage URLs

In the previous article "Test the Interim URL in Laravel Storage", we discussed the technique of two

methods to test Laravel. Although it does not support Storage::temporaryUrl(), we demonstrate how to use simulation to effectively simulate its behavior. If you haven't read it yet, it is recommended that you read it first to understand the basic knowledge of testing temporary URL in Laravel. Storage::fake temporaryUrl This article will in -depth discussions on how to pass the freezing time to make the temporary URL test more reliable, especially in terms of time -sensitive functions. We will use Laravel's built -in test auxiliary functions and Carbon's time operation function to solve the potential inconsistency in the test.

Why frozen time is important

Temporary URL usually contains expired time stamps to make it sensitive to time. In the test environment, a small amount of delay during the execution process will cause the expiration time to not match, resulting in the failure of the test. For example:

When the expiration time stamp generated during the test execution is slightly different due to the shift of time, this will happen. Frost time ensure that all operations related to time return to consistent values ​​to eliminate this difference.
<code>断言两个字符串相等失败。
预期值:'http://localhost/test/image?expiration=1737729799'
实际值:'http://localhost/test/image?expiration=1737729800'</code>
Copy after login
Copy after login

Laravel's time frozen auxiliary function

Laravel provides several methods to freeze and operate time in testing:

  • : Frozen time to the current moment. Any time for time -based calls will use this freezing time. $this->freezeTime()
  • : Simulates the specific point of moving to time.
  • $this->travelTo(Carbon::now()) : Set the current time for all Carbon operations.
  • These methods allow you to control the passage of time and ensure the consistency of the test. Carbon::setTestNow(Carbon::now()) For more details, please refer to the following resources:

Frozen time in the Laravel test

Frozen time in the test

  • Practical example: Use temporary URL to obtain external images
  • Controller
  • This is a obtaining image from the external source, stored it in the local storage, and generates a temporary URL to make a redirect controller:

This method ensures that if the image does not exist, it will be obtained and stored from the outside, and then the user is redirected to the temporary URL of the image.

Test controller

The following is how to use time frozen to test the above functions:

<code>断言两个字符串相等失败。
预期值:'http://localhost/test/image?expiration=1737729799'
实际值:'http://localhost/test/image?expiration=1737729800'</code>
Copy after login
Copy after login

Key points:

  1. : Make sure that all time -based operations in the test use the same time. $this->freezeTime() Storage assertions
  2. :
  3. : The file does not exist before the verification operation.
      : The file has been stored after confirming the operation.
    • assertMissing
    • HTTP simulation assertExists: Simulation external API calls to obtain images.
    Temporary URL verification
  4. : Comparison of expectations and actual temporary URLs, because time is freezing, they remain consistent.
  5. If there is no freezing time, this test may fail due to the time stamp in the temporary URL.
  6. Conclusion Frozen time is a simple and powerful technology that can ensure the reliability of time -sensitive testing. By combining Laravel's test auxiliary functions () and Carbon's time operation method (
  7. ), you can eliminate inconsistency caused by execution delay.

By adopting these practices, you will have tests that can predict and have more powerful temporary URLs and other time sensitive functions.

The above is the detailed content of Freezing Time: Testing Laravel Temporary Storage URLs. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template