如何使用 Pest 在 Laravel 中创建测试用例

如何使用 pest 在 laravel 中创建测试用例

测试您的 laravel 应用程序对于确保您的代码按预期工作至关重要。 pest 是一个 php 测试框架,设计简约且用户友好。在这篇博文中,我们将逐步使用 pest 在 laravel 中创建一个测试用例,重点关注一个测试雇主记录创建的示例,包括上传徽标。

先决条件

laravel 应用程序设置pest 安装在你的 laravel 应用程序中

如果您还没有安装 pest,您可以按照 pest 官方安装指南进行安装。

第 1 步:设置模型和关系

确保您的用户和雇主模型正确设置并具有必要的关系。

用户模型(app/models/user.php):

namespace appmodels;use illuminatefoundationauthuser as authenticatable;use illuminatedatabaseeloquentrelationshasone;class user extends authenticatable{    public function employer(): hasone    {        return $this->hasone(employer::class);    }}

雇主模型(app/models/employer.php):

namespace appmodels;use illuminatedatabaseeloquentmodel;use illuminatedatabaseeloquentrelationsbelongsto;class employer extends model{    protected $fillable = ['name', 'email', 'phone', 'address', 'city', 'website', 'user_id', 'logo'];    public function user(): belongsto    {        return $this->belongsto(user::class);    }}

第二步:设立工厂

创建用于生成测试数据的工厂。

用户工厂(database/factories/userfactory.php):

namespace databasefactories;use appmodelsuser;use illuminatedatabaseeloquentfactoriesfactory;use illuminatesupportstr;class userfactory extends factory{    protected $model = user::class;    public function definition()    {        return [            'name' => $this->faker->name(),            'email' => $this->faker->unique()->safeemail(),            'email_verified_at' => now(),            'password' => bcrypt('password'), // password            'remember_token' => str::random(10),        ];    }}

雇主工厂(数据库/工厂/employerfactory.php):

namespace databasefactories;use appmodelsemployer;use illuminatedatabaseeloquentfactoriesfactory;use illuminatehttpuploadedfile;class employerfactory extends factory{    protected $model = employer::class;    public function definition()    {        return [            'name' => $this->faker->company,            'email' => $this->faker->companyemail,            'phone' => $this->faker->phonenumber,            'address' => $this->faker->address,            'city' => $this->faker->city,            'website' => $this->faker->url,            uploadedfile::fake()->image('logo.png')        ];    }}

第三步:编写控制器

创建一个控制器方法来处理雇主的创建。

雇主控制器(app/http/controllers/employercontroller.php):

namespace apphttpcontrollers;use illuminatehttprequest;use appmodelsemployer;use illuminatesupportfacadesstorage;class employercontroller extends controller{    public function __construct()    {    }    public function store(request $request)    {        $validated = $request->validate([            'name' => 'required|string|max:255',            'email' => 'required|email',            'phone' => 'required|string',            'address' => 'nullable|string',            'city' => 'nullable|string',            'website' => 'nullable|url',            'logo' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',        ]);        if ($request->hasfile('logo')) {            $path = $request->file('logo')->store('logos', 'public');            $validated['logo'] = $path;        }        $employer = $request->user()->employer()->create($validated);        return response()->json($employer, 201);    }}

第 4 步:创建 pest 测试

创建测试文件并编写测试用例来验证雇主的创建,包括上传徽标。

创建测试文件:

php artisan pest:test employercontrollertest

编写测试用例(tests/feature/employercontrollertest.php):

 'test employer',        'email' => 'test@employer.com',        'phone' => '1234567890',        'address' => '123 employer st',        'city' => 'employer city',        'website' => 'https://www.employer.com',    ];    // send the post request to create the employer as a guest (unauthenticated)    $response = $this->post('/api/employers', $data);    // assert that the response status is 401 (unauthorized)    $response->assertstatus(401);    // optionally, check that the employer was not created    $this->assertdatabasemissing('employers', [        'name' => 'test employer',        'email' => 'test@employer.com',    ]);});it('creates a new employer for authenticated user', function () {    // create a user and log them in    $user = user::factory()->create();    auth::login($user);    // define the data to be sent in the post request    $data = [        'name' => 'test employer',        'email' => 'test@employer.com',        'phone' => '1234567890',        'address' => '123 employer st',        'city' => 'employer city',        'website' => 'https://www.employer.com',    ];    // send the post request to create the employer    $response = $this->post('/api/employers', $data);    // assert that the response status is 201 (created)    $response->assertstatus(201);    // assert that the employer was created    $this->assertdatabasehas('employers', [        'name' => 'test employer',        'email' => 'test@employer.com',    ]);});it('creates a new employer with a logo', function () {    // create a user and log them in    $user = user::factory()->create();    auth::login($user);    // fake a storage disk for testing    storage::fake('public');    // define the data to be sent in the post request    $data = [        'name' => 'test employer',        'email' => 'test@employer.com',        'phone' => '1234567890',        'address' => '123 employer st',        'city' => 'employer city',        'website' => 'https://www.employer.com',        'logo' => uploadedfile::fake()->image('logo.png'), // fake file for testing    ];    // send the post request to create the employer    $response = $this->post('/api/employers', $data);    // assert that the response status is 201 (created)    $response->assertstatus(201);    // optionally, check if the employer was actually created    $this->assertdatabasehas('employers', [        'name' => 'test employer',        'email' => 'test@employer.com',    ]);    // check that the file was uploaded    storage::disk('public')->assertexists('logos/logo.png'); // adjust path as needed});

第 5 步:运行害虫测试
运行您的 pest 测试以确保一切按预期工作:

php artisan test --testsuit=Feature

结论

按照以下步骤,您可以使用 pest 在 laravel 中创建测试用例来验证雇主记录的创建,包括处理文件上传。这种方法可确保您的应用程序按预期运行,并有助于在开发过程的早期发现任何问题。测试愉快!

以上就是如何使用 Pest 在 Laravel 中创建测试用例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1316134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月12日 01:10:28
下一篇 2025年12月12日 01:10:35

相关推荐

  • GolangWeb表单验证与输入校验实践

    Golang无内置表单验证因遵循“显式优于隐式”哲学,需依赖结构体绑定与第三方库(如validator)实现声明式验证,并结合手动清理确保安全;通过分离绑定、验证与清理步骤,提升代码可维护性,同时利用ValidationErrors返回具体错误信息以优化用户体验,配合HTML转义、参数化查询等手段完…

    2025年12月15日 好文分享
    000
  • 现代软件开发中的语言选择策略:PHP、GoLang与多语言栈的构建

    本文探讨了在Web、桌面及高性能应用开发中,如何权衡PHP、GoLang等编程语言的选择。面对快速开发与极致性能的需求,没有单一“完美”语言。教程强调应充分利用PHP在Web领域的现有优势,并通过C/C++等语言弥补性能短板,同时根据具体平台(桌面、移动)选择最合适的工具,构建灵活高效的多语言技能栈…

    2025年12月15日
    000
  • PHP与Go-lang抉择:构建高效多平台应用的语言策略

    在编程语言选择上,没有一劳永逸的“完美”方案。本文探讨了在Web开发中继续利用PHP的优势,并结合C/C++处理性能瓶颈的策略。同时,针对桌面和移动应用,提出了基于特定平台和性能需求的语言选择建议,强调采用多语言、多技术栈的综合方法来应对多样化的开发挑战。 Web开发:PHP的持续价值与性能优化 对…

    2025年12月15日
    000
  • Laravel在Debian上如何备份数据

    在debian系统上如何备份laravel项目的数据?以下是详细的步骤和脚本示例: 数据库备份:根据你使用的数据库类型,使用mysqldump或pg_dump进行备份。存储目录备份:将Laravel的storage目录,包括文件、缓存、日志等,备份到安全位置。环境配置文件备份:确保备份.env文件,…

    2025年12月15日
    000
  • EMQX、Go-Gin设备通信:认证、指令发送及业务处理如何实现?

    EMQX、Go-Gin 与物联网设备通信:安全机制与业务流程 本文阐述如何利用 EMQX MQTT 服务器和 Go-Gin 框架构建高效安全的物联网设备通信系统,涵盖设备认证、指令分发和业务逻辑处理三个关键环节。 一、统一认证机制:EMQX 与 HTTP API 的 JWT Token 共享 EMQ…

    2025年12月15日
    000
  • EMQX与Golang-Gin集成:如何实现高效安全的MQTT认证及业务处理?

    EMQX和Golang-Gin框架集成:实现高效安全的MQTT认证与业务逻辑处理 本文阐述如何结合EMQX MQTT消息服务器和Golang-Gin框架,构建高效安全的MQTT认证和业务处理流程。我们将围绕三个核心问题展开:如何利用JWT令牌在EMQX和HTTP服务间实现统一认证?如何向EMQX中的…

    2025年12月15日
    000
  • php中的codeIgniter框架是什么?

    CodeIgniter 因轻量、易上手、高效和灵活被广泛使用,适合初学者和小型项目。其详细文档和简洁语法降低学习门槛,无需复杂工具即可运行;核心小、加载快,资源消耗低;支持按需使用组件,不强制结构;内置数据库操作、表单验证等功能,开箱即用;采用 MVC 架构,分离数据、界面与逻辑,提升可维护性;常用…

    2025年12月14日
    000
  • php中Larave框架中间件是什么?

    中间件是Laravel中用于过滤HTTP请求的机制,可在请求到达控制器前后执行逻辑。1. 可实现身份认证、权限控制、日志记录和安全防护等功能;2. Laravel内置auth、csrf等中间件,也可通过php artisan make:middleware自定义;3. 可在路由或控制器构造函数中绑定…

    2025年12月14日
    000
  • php与python建站的区别有哪些

    PHP专为Web开发设计,适合快速建站,如用WordPress搭建内容类网站;Python是通用语言,适合复杂应用及AI等扩展。1. PHP语法嵌入HTML方便,Python通过Django/Flask实现模块化开发。2. PHP生态有成熟CMS,开发效率高;Python框架功能强,适合数据处理与全…

    2025年12月14日
    000
  • 构建双服务器通信:Laravel 与 Python Flask 的异步请求处理

    本文旨在解决 Laravel 服务器和 Python Flask 服务器之间进行双向通信时,避免阻塞连接的问题。通过探讨传统 HTTP 服务器的局限性,介绍了使用异步编程模型(如 asyncio 和 aiohttp)来优化服务器性能的方法。文章将重点讲解如何在 Flask 框架中利用异步特性,以及如…

    2025年12月14日
    000
  • 使用异步请求在 Laravel 和 Flask 服务器之间进行通信

    本文档介绍了如何在 Laravel (PHP) 和 Flask (Python) 服务器之间实现非阻塞的双向请求通信。传统 HTTP 服务器的线程模型限制了并发处理能力,当一个服务器需要等待另一个服务器的响应时,会阻塞当前线程。本文将探讨使用异步编程解决此问题的方法,重点介绍如何在 Flask 中利…

    2025年12月14日
    000
  • 使用异步方式在 Laravel 和 Flask 服务器之间进行通信

    本文档介绍了如何在 Laravel 和 Python Flask 服务器之间实现非阻塞的请求通信。针对机器学习任务,Flask 服务器需要从 Laravel 服务器获取最新数据,传统同步方式会阻塞连接。本文将探讨使用异步编程解决此问题,重点介绍 asyncio 和 aiohttp,并提供示例代码和注…

    2025年12月14日
    000
  • 实现服务器间非阻塞通信:Python Flask与Laravel的异步交互策略

    本文探讨了在Python Flask和Laravel服务器之间进行数据交互时,如何避免传统阻塞式请求导致的性能瓶颈。核心解决方案是采用异步I/O模型,特别是利用Python的asyncio和aiohttp库,或支持异步的Web框架(如Flask 3.0+或Starlette),以实现服务器线程在等待…

    2025年12月14日
    000
  • 使用异步请求在 Laravel 和 Flask 服务器间进行通信

    本文探讨了如何在 Laravel 和 Python Flask 服务器之间实现非阻塞的请求通信。传统的 HTTP 服务器模型在处理请求时会阻塞线程,影响性能。本文介绍了两种解决方案:使用多线程/进程,以及采用异步服务器架构。重点讲解了如何利用 asyncio 和 aiohttp 等库,将 Flask…

    2025年12月14日
    000
  • 如何进行数据库迁移(Migration)?

    数据库迁移的核心理念是“结构演进的版本控制”,即通过版本化、可追踪、可回滚的方式管理数据库Schema变更,确保团队协作中数据库结构的一致性。它关注的是表结构、索引、字段等“骨架”的变化,如添加字段或修改列类型,强调与应用代码迭代同步。而数据迁移则聚焦于“血肉”,即数据内容的转移、清洗、转换,例如更…

    2025年12月14日
    000
  • Python数据库操作:必须使用对象映射吗?

    Python数据库操作:灵活选择,无需拘泥于对象映射 学习Python数据库操作时,你可能会接触到SQLAlchemy、MongoDB等ORM框架。许多初学者都会问:Python数据库操作必须依赖对象映射吗?面对数百张数据库表,难道要创建同样数量的对象文件?本文将解答这些疑问,并探讨Python数据…

    2025年12月13日
    000
  • Python数据库操作:ORM映射是唯一途径吗?

    Python数据库操作:灵活选择,ORM并非唯一 许多Python开发者在使用Flask框架和数据库驱动(如SQLAlchemy或PyMongo)时,常常纠结于数据库操作是否必须进行ORM(对象关系映射)。本文将结合代码示例,阐明Python数据库操作的灵活性和多种途径。 问题在于,SQLAlche…

    2025年12月13日
    000
  • Python数据库操作:必须使用ORM吗?

    Python数据库操作:ORM并非唯一选择 许多Python开发者习惯使用ORM(对象关系映射)工具,例如SQLAlchemy,来操作数据库。 但一个常见问题是:是否必须为每个数据库表都创建对应的ORM映射?尤其面对大量表时,这种方法显得冗余且效率不高,与PHP框架(如Laravel)直接使用SQL…

    2025年12月13日
    000
  • Flask 中如何使用装饰器模拟 Laravel 框架的中间件?

    flask 中如何使用中间件拦截请求,模拟 php laravel 框架 在 php laravel 框架中,中间件是一种在请求到达控制器之前执行的类。它允许开发者在请求处理过程中注入额外的逻辑,例如身份验证、授权或其他自定义操作。 在 python 的 flask 框架中,我们可以使用装饰器来模拟…

    2025年12月13日
    000
  • 如何在 Flask 框架中实现请求拦截?

    python 的 flask 框架实现请求拦截 要在 flask 框架中实现类似 php laravel 中的中间件对请求拦截,可以使用装饰器来实现。 以检查用户认证为例,可以编写一个 check_auth 装饰器,在每次请求处理之前执行。如果用户未通过认证,则返回 401 未授权错误。 代码示例如…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信