首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用异步代码的mocha构建测试(请求)

使用异步代码的mocha构建测试(请求)
EN

Stack Overflow用户
提问于 2016-01-05 00:48:11
回答 1查看 258关注 0票数 0

我正在尝试用Mocha和Chai在Node.JS上创建单元测试。下面是要测试的函数的简化版本:

代码语言:javascript
运行
AI代码解释
复制
router.cheerioParse = function(url, debugMode, db, theme, outCollection, _callback2) {
    var nberror = 0;
    var localCount = 0;
    console.log("\nstarting parsing now :  " + theme);
    request(url, function(error, response, body) {
        //a lot of postprocessing here that returns 
        //true when everything goes well)
    });
}

以下是我正在尝试编写的测试:

代码语言:javascript
运行
AI代码解释
复制
describe('test', function(){
    it('should find documents', function(){
        assert(  true ==webscraping.cheerioParse("http://mytest.com,   null, null, null ,null,null ));
    });
})

request函数如何返回true以将其传递给测试?我尝试过使用promises,但它也不起作用。在这种情况下,我是否应该将返回语句放在then回调中?最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 00:54:01

你应该模拟request函数。你可以使用例如sinon存根(它们提供了用于定义返回值的returns函数)。

一般来说,单元测试的思想是将特定的函数(测试单元)和存根( stub )分开,就像您应该对request所做的那样:)

为此,您必须覆盖原始request对象,例如:

代码语言:javascript
运行
AI代码解释
复制
before(function() {
  var stub = sinon.stub(someObjectThatHasRequestMethod, 'request').returns(true);
});

在运行测试之后,您应该取消这个对象的存根,以便将来进行类似的测试:

代码语言:javascript
运行
AI代码解释
复制
after(function() {
  stub.restore();
});

这就是全部:)你可以同时使用afterEach/afterbeforeEach/before -选择一个更适合你的。

另请注意--因为您的代码是异步的,所以您的解决方案可能需要更复杂的测试方法。您可以提供完整的request模拟函数,并在返回值时调用done()回调,如下所示:

代码语言:javascript
运行
AI代码解释
复制
it('should find documents', function(done) {
  var requestStub = sinon.stub(someObjectThatHasRequestMethod, 'request',
    function(url, function (error, response, body) {
      done();
      return true;
  }
  assert(true === webscraping.cheerioParse("http://mytest.com,   null, null, null ,null,null ));
  requestStub.restore();
});

你可以在这里找到更多信息:

Mocha - asynchronous code testing

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

https://stackoverflow.com/questions/34602541

复制
相关文章
使用Mocha测试node应用
在使用node开发iconfont平台时,由于没有产品与设计的主导,我遇到了协同开发的一大难题——合并代码。开发过程中每次合并代码时基本上都有冲突,在手动解决冲突的过程中,随着代码量的增大,解决过程我真是如履薄冰,生怕改错了逻辑,导致一些原本的功能出错等后果。而每次合并完提交前,都要将所有的功能手动测试一遍,费时费力。
IMWeb前端团队
2019/12/03
1.1K0
使用Mocha测试node应用
使用Mocha测试node应用
[TOC] 前言 在使用node开发iconfont平台时,由于没有产品与设计的主导,我遇到了协同开发的一大难题——合并代码。开发过程中每次合并代码时基本上都有冲突,在手动解决冲突的过程中,随着代码量
IMWeb前端团队
2017/12/29
1K0
使用Mocha测试node应用
测试利器Mocha
mocha 是一个功能丰富的javascript测试框架,可以运行在nodejs和浏览器环境,使异步测试变得简单有趣。mocha 串联运行测试,允许灵活和精确地报告结果,同时映射未捕获的异常用来纠正测试用例。
笔阁
2018/09/04
1.5K0
测试利器Mocha
使用mocha编写node服务单元测试
mocha作为最流行的JavaScript测试框架之一,可以用于测试node.js服务和运行在浏览器环境下的js代码。
腾讯IVWEB团队
2020/06/27
4.1K0
Spring中的异步请求、异步调用及demo测试
背景:做项目过程中,一些耗时长的任务可能需要在后台线程池中运行;典型的如发送邮件等,由于需要调用外部的接口来进行实际的发送操作,如果客户端在提交发送请求后一直等待服务器端发送成功后再返回,就会长时间的占用服务器的一个连接;当这类请求过多时,服务器连接数会不够用,新的连接请求可能无法得到满足,从而导致客户端连接失败。因此如果 request(/url) 经过dispatcherServlet 找到对应的 controller中请求方法后,先去释放request 线程资源,通过异步调用的方式去处理contorller方法 中接下来要执行代码,当异步线程 执行完后,controller 方法返回处理的值,这样就不会因为 大量请求,服务器没法处理连接问题。
猎户星座1
2020/07/20
2.7K0
单元测试 & mocha 简述
单元测试 & mocha 简述 1. 单元测试 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证 这个最小测试单元,可以是一个函数,可以是一个类,可以是一个对象,也可以
IMWeb前端团队
2017/12/29
8460
单元测试 & mocha 简述
单元测试 & mocha 简述
这个最小测试单元,可以是一个函数,可以是一个类,可以是一个对象,也可以是一个组件,一个插件
IMWeb前端团队
2019/12/04
7790
单元测试 & mocha 简述
测试工具 mocha 用法小结
腾讯IVWEB团队
2017/03/13
1.8K0
[PHP] 使用guzzle发送异步的HTTP请求
PHP中请求一个HTTP服务,一般都是阻塞的, 如果有多个HTTP请求 , 需要串行的执行 , 一个接一个的请求 , 可以使用guzzle php这个类库来异步的同时发送多个HTTP请求 .
唯一Chat
2020/04/13
2.8K0
测试工具mocha用法小结
所以这里稍微做了一些修改,简单介绍一下常用的写法和命令,其次将之前的一些示例改成javascript版本,方便没有coffee基础的同学浏览。
IMWeb前端团队
2019/12/03
1.2K0
测试工具mocha用法小结
IMWeb前端团队
2017/12/28
1.3K0
测试框架 Mocha 实例教程
Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏览器和Node环境都可以使用。 所谓"测试框架",就是运行测试的工具。通过它,可以为JavaScript
ruanyf
2018/04/12
2.3K0
测试框架 Mocha 实例教程
使用CompletableFuture构建异步应用(二)
本文主要介绍Java 8 中的异步处理的方式,主要是 CompletableFuture类的一些特性。 为了展示CompletableFuture的强大特性,我们会创建一个名为“最佳价格查询器” (best-price-finder)的应用,它会查询多个在线商店,依据给定的产品或服务找出最低的价格。这个过程中,你会学到几个重要的技能。
栋先生
2018/09/29
8570
使用配置表+Mocha动态生成用例的JSAPI自动化测试
一、版本发布前,接口测试之痛 App版本发布前,我们都要手工做接口测试,目的是保证App内部H5页面所使用的JSAPI的功能正常,而对所有H5页面进行的P0级功能测试。为什么要做接口测试呢?因为JSAPI无法抓包,测试难度比较大,所以只能通过对H5页面的功能进行校验。但是手工测试,场景覆盖不全面,且耗时耗力。 二、JSAPI自动化测试方案 首先思考几个问题:一个APP有多少个JSAPI?它的用例场景有多少?如何能做到对用例的高效管理? 答案:对于我们app,有22条JSAPI,每条JSAPI多的话可能有
腾讯移动品质中心TMQ
2019/01/15
2.2K0
使用配置表+Mocha动态生成用例的JSAPI自动化测试
servlet异步请求
其中第二步处理业务逻辑时候很可以碰到比较耗时的任务,此时servlet主线程会阻塞等待完成业务处理,对于并发比较大的请求可能会产生性能瓶颈,则servlet3.0之后再此处做了调整,引入了异步的概念。
全栈程序员站长
2022/09/18
9390
servlet异步请求
基于 Vue 测试套件引入 Mocha + Expect 测试 Vue 组件
在 Vue 框架中编写单元测试的基本流程和学院君之前在 Laravel 框架和 Go-Micro 微服务框架中编写单元测试时一模一样,只是使用的测试框架和语法有所区别罢了,Laravel 中我们使用的测试框架是 PHPUnit,Go-Micro 中我们使用的测试框架是 GoConvey,而在 Vue 框架中,我们将使用 Vue 生态的 Vue 测试套件并引入 Mocha 测试框架进行 BDD 风格的单元测试。
学院君
2023/03/03
1.5K0
基于 Vue 测试套件引入 Mocha + Expect 测试 Vue 组件
Spring 异步请求
With the above in mind, the following is the sequence of events for async request processing with a Callable:
数媒派
2022/12/01
8300
AsyncContext异步请求的用法
在Servlet 3.0中,在ServletRequest上提供了startAsync()方法
全菜工程师小辉
2019/09/16
5.4K0
AsyncContext异步请求的用法
点击加载更多

相似问题

如何使用await使用mocha测试异步代码

10

Mocha异步测试,重用相同的请求。

12

使用Mocha测试异步功能

14

使用mocha测试异步功能

116

使用mocha测试异步函数

36
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档