社区首页 >问答首页 >如何在Laravel中测试POST路由

如何在Laravel中测试POST路由
EN

Stack Overflow用户
提问于 2015-03-01 05:12:25
回答 4查看 22.7K关注 0票数 13

我正在执行以下操作来测试对Laravel的POST调用。我期待根据我的路线,对问题的帖子将作为存储操作方法被分派。这在浏览器中有效。

我的测试:

代码语言:javascript
代码运行次数:0
复制
public function setUp()
    {   
        parent::setUp();

        Session::start();
    }

    public function testStoreAction()
    {
        $response = $this->call('POST', 'questions', array(
            '_token' => csrf_token(),
        ));

        $this->assertRedirectedTo('questions');
    }

但是,我告诉我重定向不匹配。此外,我还可以看到它根本不会转到store操作方法。我想知道它将转到哪个操作方法,以及为什么它不会转到存储方法(如果我查看route:list,我可以看到有一个POST问题/路由应该转到questions.store;这在浏览器中也有效,但在我的测试中不起作用)。另外,我是否正确地编写了此资源的调用?我在这里添加了令牌,因为它抛出了一个应该抛出的异常,在某些测试中,我会让令牌检查通过。

EN

回答 4

Stack Overflow用户

发布于 2015-11-02 01:33:29

你可以试试这个:

代码语言:javascript
代码运行次数:0
复制
public function testStoreAction()
{
    Session::start();
    $response = $this->call('POST', 'questions', array(
        '_token' => csrf_token(),
    ));
    $this->assertEquals(302, $response->getStatusCode());
    $this->assertRedirectedTo('questions');
}
票数 6
EN

Stack Overflow用户

发布于 2015-03-05 12:47:02

测试路由的最推荐方法是检查200响应。当你有多个测试时,这是非常有用的,比如你一次检查所有的post路由。

为此,只需使用:

代码语言:javascript
代码运行次数:0
复制
public function testStoreAction()
{
    $response = $this->call('POST', 'questions', array(
        '_token' => csrf_token(),
    ));

    $this->assertEquals(200, $response->getStatusCode());
}
票数 2
EN

Stack Overflow用户

发布于 2019-12-12 13:54:03

我使用

代码语言:javascript
代码运行次数:0
复制
$response->assertSessionHasErrors(['key'=>'error-message']);

为了断言验证工作。但是要使用它,您必须从要发送post请求的页面开始。如下所示:

代码语言:javascript
代码运行次数:0
复制
$user = User::where('name','Ahmad')->first(); //you can use factory. I never use factory while testing because it is slow. I only use factory to feed my database and migrate to make all my test faster.
$this->actingAs($user)->get('/user/create'); //This part is missing from most who get errors "key errors is missing"
$response = $this->post('/user/store', [
                '_token' => csrf_token()
            ]);
//If you use custom error message, you can add as array value as below.
$response->assertSessionHasErrors(['name' => 'Name is required. Cannot be empty']);
$response->assertSessionHasErrors(['email' => 'Email is required. Make sure key in correct email']);

然后如果你想测试错误是否也被正确地显示了回来。再次运行以上测试,并进行一些更改,如下所示:

代码语言:javascript
代码运行次数:0
复制
$this->actingAs($user)->get('/user/create'); 
$response = $this->followingRedirects()->post('/user/store', [
                '_token' => csrf_token()
            ]); //Add followingRedirects()
$response->assertSeeText('Name is required. Cannot be empty');
$response->assertSeeText('Email is required. Make sure key in correct email');

我的猜测是,如果你不从页面开始显示错误,(你放置表单的创建/更新页面),在这个过程中的会话链将会遗漏一些重要的键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28790348

复制
相关文章
接口测试如何在post请求中传递文件
2.找到body这个选项,输入文件对应的参数名,在然后把参数名后面的text选择为file。
sik1
2022/06/21
3.4K0
[PHP] laravel中的api路由前缀
所有的 Laravel 路由都在 routes 目录中定义,这些文件都由框架自动加载。routes/web.php 文件用于定义 web 界面的路由。这里面的路由会被分配给 web 中间件组,它提供了会话状态和 CSRF 保护等功能。 定义在 routes/api.php 中的路由都是无状态的,并且被分配了 api 中间件组。
唯一Chat
2021/06/22
3.2K0
[PHP] laravel中的api路由前缀
Laravel5.1 路由 -路由分组
有时候啊 一大堆路由它们都有共同的地方,比如都使用一个中间件(过两天写)或是前缀都一样,避免代码重复 我们可以将他们分到一组中。
全栈程序员站长
2022/07/07
5600
laravel 路由404问题
今天在创建一个laravel 项目的时候,首页能够访问 在这里插入图片描述 Route::get(’/home’, function () { //return view(‘welcome’)
双面人
2020/02/13
2.4K0
路由之POST请求(三)
这一次我们讲POST请求 post请求和get请求的定义方式一样,只不过在laravel中为了安全,post请求会有csrf限制 老规矩,上代码
大话swift
2019/10/16
6810
Laravel 路由使用进阶
常言道「物以类聚,人以群分」,同样,在日常开发中,我们通常会将具有某些共同特征的路由进行分组,这些特征包括是否需要认证、是否具有共同的路由前缀或者子域名、以及是否具有相同的控制器命名空间等,显然,对路由按照共同特征进行分组后可以避免重复为某些路由定义相同的路由特征,让代码更加简洁,可读性和可维护性更好。
学院君
2020/10/19
1.5K0
Laravel 路由定义文件
路由就是提供接收HTTP请求的路径,并和程序交互的功能。提供访问程序的URL地址,并做一些设置工作
很酷的站长
2023/02/18
6870
Laravel 路由定义文件
Laravel 路由使用入门
对任何一个 Web 应用框架而言,通过 HTTP 协议处理用户请求并返回响应都是核心必备功能,也就是说,对于我们学习和使用一个 Web 框架,第一件要做的事情就是定义应用路由,否则,将无法与终端用户进行交互。而我们的 Laravel 从入门到精通系列教程之旅也将从路由开始,在这篇真正意义上的开篇教程中,我们将学习如何定义路由,然后将其指向要执行的代码,并处理各种路由需求。
学院君
2020/10/19
2.6K0
Laravel 路由使用入门
laravel隐性路由绑定
控制器app/Http/Controllers/UsersController.php:
章鱼喵
2019/04/09
1.3K0
掌握 Laravel 的测试方法
不管你承认与否在研发一款产品时,软件测试对项目而言意义重大,然而是测试通常被我们视而不见。这篇文章我们主要研究 Laravel 框架的测试方法。
柳公子
2018/09/17
5.7K0
什么是分段路由?如何在网络中实施分段路由?
在计算机网络中,分段路由(Subnetting)是一种将一个大的网络划分为多个较小子网的技术。它允许网络管理员更有效地分配 IP 地址和管理网络流量。本文将详细介绍分段路由的概念、原理以及如何在网络中实施分段路由。
网络技术联盟站
2023/05/28
1.3K0
什么是分段路由?如何在网络中实施分段路由?
Laravel 表单方法伪造与 CSRF 攻击防护
有时候,我们可能需要手动定义发送表单数据所使用的 HTTP 请求方式,而 HTML 表单仅支持 GET 和 POST 两种方式,如果要使用其他的方式,则需要自己来定义实现。
学院君
2020/10/19
8.7K0
Laravel 表单方法伪造与 CSRF 攻击防护
laravel post提交数据时显示异常
这是由于在laravel框架中有此要求:任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 CSRF 令牌,否则,这个请求将会被拒绝。
全栈程序员站长
2022/07/07
9970
Laravel源码笔记(二)路由
路由是web服务不可或缺的一部分,一个好的web框架必须具备一整套灵活且丰富的路由系统。Laravel自然也不例外,通过配置文件中一两行代码就可以实现一个具有完整的参数、属性及约束的路由,甚至可以免去写专门的controller。如此强大的功能是如何实现的呢?下面仍然从laravel框架的启动过程出发,探究一下源码中是如何一步步实现路由服务的。
asterDY
2020/04/13
7.5K1
Laravel源码笔记(二)路由
[译]Laravel 5.0 之路由缓存
本文译自 Matt Stauffer 的系列文章. ---- 在 PHP 代码中进行性能优化并非总是我们优先考虑的问题. 但是我们对后端代码的性能优化--特别是在一些很复杂的操作上--可以对网站的请求时间产生几十甚至几百毫秒的影响. 看上去不算很多, 但是几百毫秒的差异对于你的应用的用户感知速度来说可能意味着巨大的差异(链接可能需要扶墙访问). 你可能没有注意到, 在 Laravel 4 以及更老版本中, 路由逻辑是性能上的一个瓶颈--特别是对于有很多路由定义的应用而言. 一个只有几百条路由定义的 Lara
小李刀刀
2018/03/02
1.4K0
Laravel —— 路由的学习笔记
最近的工作非常忙,公司从项目紧张起来之后,一直在实施996加班制度,工作强度虽然如此,但是任然要利用有限的空余时间来学习。之前都有在前端方面的学习,所以一直想学习PHP,好把前后端的知识能贯穿起来做。现在有个很小的目标就是完成自己的第一个前后端串联的作品。
Originalee
2018/08/30
1.1K0
通过 Request 对象实例获取用户请求数据
到目前为止,我们在教程中所提供的大部分是静态页面。作为一门主要用于构建 Web 网站的动态语言,PHP 不仅可以处理静态页面,更重要的功能是处理用户动态请求,这才是一个 Web 2.0 网站最灵动的部分,从留言板到博客评论、到形形色色的社交网站、问答网站,无不是用户创造的内容让互联网更加绚烂多姿、五彩缤纷。而作为最流行的 PHP 框架,Laravel 自然也是为处理用户请求提供了丰富的工具集,从收集、验证、到过滤、编排,可谓是一应俱全,接下来,我们将通过三四篇教程的篇幅来为你详细介绍如何在 Laravel 项目中处理用户请求,首先,我们从收集用户请求数据开始。
学院君
2021/01/08
19.8K0
点击加载更多

相似问题

基于XML的Laravel测试POST路由

20

如何在Laravel中重定向到POST路由

40

无法执行API路由的Laravel测试中的POST请求

24

如何在vue js中使用群组路由,如laravel?

215

带有post路由的laravel路由参数与post参数

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文