首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel 5:如何测试调用API的作业?

Laravel 5:如何测试调用API的作业?
EN

Stack Overflow用户
提问于 2018-03-04 23:24:03
回答 1查看 2.3K关注 0票数 5

我一直在自学如何编写测试用例,但我不知道如何测试Job是否调用了API (并断言API已经得到了预期的响应)。

这是我实验的片段..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Class SampleJob extends Job
{

    public function handle()
    {
        $request->method('post')->setUrl('/blahblah')->setBody($body);
        //For the sake of convenience, let me just state that
        //$request calls an API call.
        //i.e. If it's successful, you'll get
        //HTTP status 200 and a JSON object
    }
 }


Class SampleJobTest extends TestCase
{
    use DispatchesJobs;

    /** @test */
    public function it_calls_api()
    {
        $data = factory(MockData::class)->create();
        $this->dispatch(new SampleJob($data));

        //assert that the API was called

        //assert that there was an HTTP response - status & JSON
    }
}

正如评论中提到的那样,是否可以断言API是用预期的响应调用的?

如有任何建议,将不胜感激。

编辑

分派SampleJob时,将调用API。

EN

回答 1

Stack Overflow用户

发布于 2018-03-05 04:51:52

测试Json作业有点棘手,因为您必须测试它是否是队列的、调度的,然后您就可以知道是否要接收响应,以及它是否是预期的响应。

为了保持它的简单性和有用性,我将函数划分为3个测试(调度、队列和结果),这样您就可以测试每个进程,并且可以扩展更多来测试

队列: 队列

  1. 哪个队列是作业pushedOn?
  2. 多少次?
  3. 发送还是阻止?

总线: 总线命令

  1. 发送还是阻止?

如果您对同一个页面感兴趣,您可以在队列测试中找到更多的参考在这里,对于命令总线也可以找到相同的。

这是测试类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Support\Facades\Queue; // includes the fake method
use Illuminate\Support\Facades\Bus;  // includes the fake method
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Bus\DispatchesJobs; // for the Queue
use Illuminate\Foundation\Bus\Dispatcher; // for the Bus
use App\Jobs\APIjob as Job; // your job goes here


class ExampleTest extends TestCase
{
    use DispatchesJobs;
    /**
     * Setup the test environment. //  to  make the environment as a usual Laravel application which includes the helpers functions.
     *
     * @return void
     */
    protected function setup(){
        parent::setUp();
    }

    /**
     * A basic dispatch example.
     * 
     * @return void
     * @test
     */
    public function it_dispatches(){
        Bus::fake(); // faking the Bus command
        $job = new Job;
        Bus::dispatch($job);
        Bus::assertDispatched(Job::class, 1);
    }

    /**
     * A basic queue example.
     * 
     * @return void
     * @test
     */
    public function it_queues(){
        Queue::fake(); // faking Queue using the facade
        $job = new Job;
        Queue::push($job); // manually pushing the job to the Queue
        $this->dispatch($job);
        Queue::assertPushed(Job::class, 1);
    }

    /**
     * A basic receive example.
     *
     * @return void
     * @test
     */
    public function it_recieves_api(){
        $response =  $this->get('/APIroute'); // change this to match the route which you will receive the Json API from.

        $response->assertStatus(200) //
                 ->assertJsonFragment([ // using Fragment if partial, you can remove the word Fragment for full match
                        [
                        'id' => 1,
                        "name" => "Emely Jones",
                        "email" => "sgleichner@example.com",
                        "created_at" => "2018-03-05 16:36:14",
                        "updated_at" => "2018-03-05 16:36:14",
                        ],
                    ]);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49105324

复制
相关文章
如何禁用 Ubuntu 服务器中终端欢迎消息中的广告
如果你正在使用最新的 Ubuntu 服务器版本,你可能已经注意到欢迎消息中有一些与 Ubuntu 服务器平台无关的促销链接。你可能已经知道 MOTD,即 Message Of The Day 的开头首字母,在 Linux 系统每次登录时都会显示欢迎信息。通常,欢迎消息包含操作系统版本,基本系统信息,官方文档链接以及有关最新安全更新等的链接。这些是我们每次通过 SSH 或本地登录时通常会看到的内容。但是,最近在终端欢迎消息中出现了一些其他链接。我已经几次注意到这些链接,但我并在意,也从未点击过。题图是我的 Ubuntu 18.04 LTS 服务器上显示的终端欢迎消息。
星哥玩云
2022/07/24
4.3K0
如何禁用 Ubuntu 服务器中终端欢迎消息中的广告
那些最受欢迎的 Node.js 视图引擎[每日前端夜话0xA7]
Node js 视图引擎就像 Laravel 中的 Blade。其最基本的定义是,视图引擎是帮助我们用比通常更短、更简单的方式编写 HTML 代码并重用的工具。此外,它还可以从服务器端导入数据并渲染最终的 HTML。Node.js 项目中一些常见的视图引擎如下:
疯狂的技术宅
2019/08/15
2.4K0
那些最受欢迎的 Node.js 视图引擎[每日前端夜话0xA7]
在提取 Docker 映像时解决“未找到清单”错误
如果您尝试拉取 Docker 映像并且它显示未找到清单错误,那么您需要了解如何解决它。
网络技术联盟站
2022/03/21
1.5K0
在提取 Docker 映像时解决“未找到清单”错误
第14章_视图
视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
程序员Leo
2023/08/07
1690
第14章_视图
Django 2.1.7 视图 - 自定义404错误、500错误
上一篇Django 2.1.7 模型管理器 models.Manager 以及 元选项
Devops海洋的渔夫
2019/06/18
2.1K0
Django 2.1.7 视图 - 自定义404错误、500错误
小程序开发找不到appjson_appjson文件内容错误未找到
– 问题原因: 导入微信开发者工具后project.config.json文件被微信开发者工具修改,缺少代码:“miniprogramRoot”: “./dist”从而导致微信开发者工具无法找到app.json文件进而报错:app.json: app.json 未找到,所以需要找到app.json 文件所在的文件夹,然后在project.config.json文件里写上aap.json的路径重新运行即可。
全栈程序员站长
2022/11/04
3K0
小程序开发找不到appjson_appjson文件内容错误未找到
ASP.NET Core 5.0 MVC中的视图分类及使用——布局视图、启动视图、导入视图、详细视图、分部视图
我们可以在这个页面,添加一些全局性的内容,比如全局变量等,然后在具体View页面使用这些变量值
明志德道
2023/10/21
4030
ASP.NET Core 5.0 MVC中的视图分类及使用——布局视图、启动视图、导入视图、详细视图、分部视图
python中的各种符号(欢迎补充)
和py小朋友交易久了,发现小py的花样太多了,经常会遇到陌生的小玩意,这里专门开一篇整理一下py的那些小符号,以供将来参考使用:
全栈程序员站长
2022/09/05
9710
bash: rsync: 未找到命令
今天学习了rsync的同步操作,本打算往服务器同步一些数据,于是报了一下错误: ➜ ~ rsync -r /Users/Apple/index.html root@1.1.1.1:/var/www/html/ bash: rsync: 未找到命令 rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12
肓己
2021/08/12
2.6K0
asp网站访问调试 报错 数据库连接出现错误未找到提供程序
asp站点调试,一般就是权限、父路径、32位应用程序池、dotnet 版本和是否classic,数据库连接要显性指定端口、temp目录权限,没其他的了注意事项了,这样描述太经验主义了,那技术点描述,以temp目录权限为例,访问的时候报
Windows技术交流
2021/09/23
2.6K0
错误页面定制与视图传递多个参数
一、错误页面定制 视图函数 <span class="hljs-meta">@app.errorhandler(404)</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">page_not_found</span><span class="hljs-params">(e)</span>:</span> <span class="hljs-keyword">
星哥玩云
2022/09/14
1K0
第6章—渲染web视图—使用Apache Tiles视图定义布局
Tiles是一个免费的开源模板Java应用程序的框架。基于复合模式简化的用户界面的构建。对于复杂的网站仍是最简单、最优雅的方式与任何MVC技术一起工作。Struts2对Tiles提供了支持,如今Tiles发展已有13个年头,成为Apache的一个独立项目,我们可以单独使用Tiles来构建用户界面布局。
Dream城堡
2018/09/10
5450
第6章—渲染web视图—使用Apache Tiles视图定义布局
iOS 系统中的视图动画
动画为用户界面的状态转换提供了流畅的可视化效果, 在 iOS 中大量使用了动画效果, 包括改变视图位置、 大小、 从可视化树中删除视图, 隐藏视图等。 你可以考虑用动画效果给用户提供反馈或者用来实现有趣的特效。
beginor
2020/08/10
2.2K0
第23章、存储程序和视图
本章讨论存储的程序和视图,这些数据库对象是根据存储在服务器上供以后执行的SQL代码定义的数据库对象。
幺鹿
2018/08/21
1K0
Django 教程 --- Django中的视图
Django视图是Django M V T结构的重要参与者之一。视图是用户界面,即您呈现网站时在浏览器中看到的内容。它由HTML / CSS / Javascript和Jinja文件表示。根据Django文档,视图函数是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像(Web浏览器可以显示的任何内容)
公众号---人生代码
2020/05/26
3K0
Django 教程 --- Django中的视图
21. Django 2.1.7 视图 - 自定义404错误、500错误
上一篇Django 2.1.7 模型管理器 models.Manager 以及 元选项
Devops海洋的渔夫
2022/01/17
1K0
21. Django 2.1.7 视图 - 自定义404错误、500错误
第 5 篇:用视图集,简化你的代码
在 RESTful 架构中,对资源的常规操作无非就是查询、新增、修改、删除等这么几种。为此,django-rest-framework 分别提供了对应通用类视图函数。但是,如果对同一个资源的不同操作逻辑分散在各个视图函数中,从逻辑上来说不太合理,实际中管理起来也不是很方便,还会产生很多重复性的代码。因此,django-rest-framework 引入了视图集(Viewsets),把对同一个资源的不同操作,集中到一个类中。同样的,针对 Web 开发中的常见逻辑,django-rest-framework 也提供了通用视图集,进一步简化开发工作。
HelloGitHub
2021/05/14
8200
点击加载更多

相似问题

实时服务器错误: InvalidArgumentException第137行中的FileViewFinder.php :视图[欢迎]未找到

12

InvalidArgumentException在FileViewFinder.php第137行中:未找到视图[books.edit]

15

Laravel 5 InvalidArgumentException在FileViewFinder.php第137行:视图[.admin]未找到

85

Fileviewfinder.php第137行中的InvalidArgumentException

10

FileViewFinder.php第137行中的Laravel InvalidArgumentException:

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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