20%
翻译进度
5
分块数量
2
参与人数

快速入门

这是一篇协同翻译的文章,你可以点击『我来翻译』按钮来参与翻译。


测试:入门#

介绍#

Laravel 是以测试为中心构建的。实际上,框架内置了对 PestPHPUnit 的支持,并且已经为您的应用程序设置了一个 phpunit.xml 文件。框架还提供了方便的辅助方法,使您能够直观地测试您的应用程序。

默认情况下,您的应用程序的 tests 目录包含两个目录: FeatureUnit 。单元测试是专注于代码中非常小的、独立部分的测试。实际上,大多数单元测试可能只关注一个方法。"Unit" 测试目录中的测试不会启动您的 Laravel 应用程序,因此无法访问应用程序的数据库或其他框架服务。

功能测试可能会测试代码的更大部分,包括多个对象如何相互交互,甚至是对 JSON 端点的完整 HTTP 请求。 通常,您的大多数测试应该是功能测试。这些类型的测试提供了系统整体正常运行的最大信心。

FeatureUnit 测试目录中都提供了一个 ExampleTest.php 文件。安装新的 Laravel 应用程序后,执行 vendor/bin/pestvendor/bin/phpunitphp artisan test 命令来运行您的测试。

carveybunt 翻译于 5 天前

Environment#

When running tests, Laravel will automatically set the configuration environment to testing because of the environment variables defined in the phpunit.xml file. Laravel also automatically configures the session and cache to the array driver so that no session or cache data will be persisted while testing.

You are free to define other testing environment configuration values as necessary. The testing environment variables may be configured in your application's phpunit.xml file, but make sure to clear your configuration cache using the config:clear Artisan command before running your tests!

The .env.testing Environment File#

In addition, you may create a .env.testing file in the root of your project. This file will be used instead of the .env file when running Pest and PHPUnit tests or executing Artisan commands with the --env=testing option.

Creating Tests#

To create a new test case, use the make:test Artisan command. By default, tests will be placed in the tests/Feature directory:

php artisan make:test UserTest

If you would like to create a test within the tests/Unit directory, you may use the --unit option when executing the make:test command:

php artisan make:test UserTest --unit

[!NOTE]
Test stubs may be customized using stub publishing.

Once the test has been generated, you may define test as you normally would using Pest or PHPUnit. To run your tests, execute the vendor/bin/pest, vendor/bin/phpunit, or php artisan test command from your terminal:

<?php

test('basic', function () {
    expect(true)->toBeTrue();
});
<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     */
    public function test_basic_test(): void
    {
        $this->assertTrue(true);
    }
}

[!WARNING]
If you define your own setUp / tearDown methods within a test class, be sure to call the respective parent::setUp() / parent::tearDown() methods on the parent class. Typically, you should invoke parent::setUp() at the start of your own setUp method, and parent::tearDown() at the end of your tearDown method.

Running Tests#

As mentioned previously, once you've written tests, you may run them using pest or phpunit:

./vendor/bin/pest
./vendor/bin/phpunit

In addition to the pest or phpunit commands, you may use the test Artisan command to run your tests. The Artisan test runner provides verbose test reports in order to ease development and debugging:

php artisan test

Any arguments that can be passed to the pest or phpunit commands may also be passed to the Artisan test command:

php artisan test --testsuite=Feature --stop-on-failure

Running Tests in Parallel#

By default, Laravel and Pest / PHPUnit execute your tests sequentially within a single process. However, you may greatly reduce the amount of time it takes to run your tests by running tests simultaneously across multiple processes. To get started, you should install the brianium/paratest Composer package as a "dev" dependency. Then, include the --parallel option when executing the test Artisan command:

composer require brianium/paratest --dev

php artisan test --parallel

By default, Laravel will create as many processes as there are available CPU cores on your machine. However, you may adjust the number of processes using the --processes option:

php artisan test --parallel --processes=4

[!WARNING]
When running tests in parallel, some Pest / PHPUnit options (such as --do-not-cache-result) may not be available.

Parallel Testing and Databases#

As long as you have configured a primary database connection, Laravel automatically handles creating and migrating a test database for each parallel process that is running your tests. The test databases will be suffixed with a process token which is unique per process. For example, if you have two parallel test processes, Laravel will create and use your_db_test_1 and your_db_test_2 test databases.

By default, test databases persist between calls to the test Artisan command so that they can be used again by subsequent test invocations. However, you may re-create them using the --recreate-databases option:

php artisan test --parallel --recreate-databases

Parallel Testing Hooks#

Occasionally, you may need to prepare certain resources used by your application's tests so they may be safely used by multiple test processes.

Using the ParallelTesting facade, you may specify code to be executed on the setUp and tearDown of a process or test case. The given closures receive the $token and $testCase variables that contain the process token and the current test case, respectively:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\ParallelTesting;
use Illuminate\Support\ServiceProvider;
use PHPUnit\Framework\TestCase;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        ParallelTesting::setUpProcess(function (int $token) {
            // ...
        });

        ParallelTesting::setUpTestCase(function (int $token, TestCase $testCase) {
            // ...
        });

        // Executed when a test database is created...
        ParallelTesting::setUpTestDatabase(function (string $database, int $token) {
            Artisan::call('db:seed');
        });

        ParallelTesting::tearDownTestCase(function (int $token, TestCase $testCase) {
            // ...
        });

        ParallelTesting::tearDownProcess(function (int $token) {
            // ...
        });
    }
}

Accessing the Parallel Testing Token#

If you would like to access the current parallel process "token" from any other location in your application's test code, you may use the token method. This token is a unique, string identifier for an individual test process and may be used to segment resources across parallel test processes. For example, Laravel automatically appends this token to the end of the test databases created by each parallel testing process:

$token = ParallelTesting::token();

Reporting Test Coverage#

[!WARNING]
This feature requires Xdebug or PCOV.

When running your application tests, you may want to determine whether your test cases are actually covering the application code and how much application code is used when running your tests. To accomplish this, you may provide the --coverage option when invoking the test command:

php artisan test --coverage

Enforcing a Minimum Coverage Threshold#

You may use the --min option to define a minimum test coverage threshold for your application. The test suite will fail if this threshold is not met:

php artisan test --coverage --min=80.3

Profiling Tests#

The Artisan test runner also includes a convenient mechanism for listing your application's slowest tests. Invoke the test command with the --profile option to be presented with a list of your ten slowest tests, allowing you to easily investigate which tests can be improved to speed up your test suite:

php artisan test --profile

本文章首发在 LearnKu.com 网站上。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~