使用karma + mocha + sinon 测试 Ajax 请求

在用 karma + mocha 进行 JS 代码测试的时候,难免会遇到要测试 Ajax 发请求的情况。然后查找一下网上的资料,发现可以使用 sinon 来进行造假:)。下面来进行详细讲解:

第一步:安装 sinon

yarn add sinon --dev

第二步:引入 sinon 文件

引入 sinon 文件有很多种方式,我在这里使用的是:利用 karma-requirejs 包,进行引用。

  1. 安装 karma-requirejs
 yarn add karma-requirejs requirejs --dev
  1. 在 karma.conf.js 文件中修改 files 属性
 files: ['../src/xx.js', // 此处为要测试的源文件'../node_modules/chai/chai.js', // 引入 chai '../node_modules/sinon/pkg/sinon.js', // 引入 sinon'./test.js' // 测试用例
],
// 需要注意的是,所有包的引入必须放在用例之前,使用之前要先引入,很容易理解吧 :)

第三步:写测试用例

假设在源文件中有一个 myGet 函数,用来发送 get 请求。然后又有一个 myPost 函数,来发送 post 请求。

describe('验证Ajax请求', () => {// 在测试用例开始之前,初始化一个 fakeXMLHttpRequest// 将其推入到 requests 数组中,方便之后调用before(() => {this.xhr = sinon.useFakeXMLHttpRequest()this.requests = []this.xhr.onCreate = (xhr) => {this.requests.push(xhr)}})// 测试完成之后还原 xhrafter(() => {this.xhr.restore()})it('使用Get方法正确获取Json数据', (done) => {var data = { 'foo': 'bar' }var URL = 'https://jsonplaceholder.typicode.com/comments' // 使用模拟服务器var returnData = JSON.stringify(data)// 调用需要测试的 get 函数,发送一个 get 请求// 在其 success 回调函数中验证获取的数据是否传送的数据myGet(URL, (result) => {expect(result).to.deep.equal(returnData)done() // 不要忘记调用 done ,告诉 mocha 测试用例已完成})// 直接将在每个测试用例之前生成 xhr 的状态码设置为 200, 内容设置为 json 格式,并且将返回数据设置为 returnData。设置完成之后,myGet拿到的数据就为我们设置的数据了。this.requests[0].respond(200, { 'Content-Type': 'text/json' }, returnData)})it('使用POST方法传送JSON数据', () => {var data = { hello: 'world' }var dataJson = JSON.stringify(data)var URL = 'https://jsonplaceholder.typicode.com/posts' // 使用模拟服务器// 使用 mypost 方法发送一个 post 请求,将 data 传送到服务器myPost(URL, data)// xhr 拿到的数据就是刚刚发送的数据expect(this.requests[0].requestBody).to.deep.equal(dataJson)})
})

至此,测试 Ajax 完成。是不是很简单 : )
需要说明的一点是,karma 虽然模拟了浏览器环境,但上述代码并没有真的发送网络请求,URL 可以随便写哒。所有模拟发送请求返回的东西,都是我们自己通过 fakeXMLHttpRequest 自己设置的。


karma 如果是全局安装,你安装任何它需要使用的 plugins 都需要进行全局安装。非常麻烦。所以不建议全局安装。不过项目内的安装使用时最好配置 scripts,不然每次运行路径写起来也很头疼。

// package.json
"scripts": {"test": "node .\\node_modules\\karma\\bin\\karma start .\\test\\karma.conf.js"
}
// .\node_modules\karma\bin\karma : 为 karma 路径
// .\test\karma.conf.js : 为 karma config 路径

使用karma + mocha + sinon 测试 Ajax 请求相关推荐

  1. ajax请求node.js_Node.js测试:模拟HTTP请求

    ajax请求node.js Writing tests for an application that relies on external services, say, a RESTful API, ...

  2. 前端新手使用karma+mocha+chai+sinon 进行angularjs 单元测试

    这里只谈如何搭建环境. 选型:在jasmine 和 mocha+chai中间比较了一下,根据项目需要选择了后者. 安装依赖包和环境 直接执行下列命令安装或在项目目录下 运行npm install(pa ...

  3. 前端测试 karma mocha should 都是什么鬼?

    测试TDD和BDD的区别 TDD是测试驱动开发,通过用测试用例来规范约束开发者,编写出质量更高的代码 BDD是行为驱动开发,描述行为路径,就像描述故事,产品和前线业务人员可参与到开发流程中,减轻测试和 ...

  4. 怎么测试ajax get请求,为什么我的AJAX在运行测试时请求dev中的PUT请求,但请求了GET请求?...

    在我的Rails应用程序中,我制作了一个AJAX PUT请求(使用Coffeescript),该请求在我的开发环境中正常工作.当我检查按钮,点击后,会触发使用Firefox的AJAX请求时,它看起来是 ...

  5. 搭建 vue2 单元测试环境(karma+mocha+webpack3)

    从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...

  6. 大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试

    一. 前端自动化测试 大多数前端开发者对测试相关的知识是比较缺乏的,一来是开发节奏很快,来不及写,另一方面团队里也配备了"人肉测试机",完全没必要自己来.但随着项目体量的增大,许多 ...

  7. vue-cli自动化测试karma + mocha + chai

    最近再为团队团队选择可行的测试方案.前端目前是vue-cli技术栈.试着在vue项目添加测试.把测试完整的方案记录下来. vue官网给的例子用的是karma + mocha + chai. karma ...

  8. 为什么ajax请求状态码为0,ajax请求状态码为0的解决办法

    原文链接:https://blog.csdn.net/changqing5818/article/details/53932463 前言 今天遇到个奇怪的问题,使用JQuery的ajax请求,后台的C ...

  9. 关于 x-requested-with 请求头 区分ajax请求还是普通请求

    今天做Spring MVC异常统一处理这块,在处理的时候需要区分发送过来的请求是传统请求还是ajax请求,网上有现成的代码,我是参考http://www.2cto.com/kf/201412/3643 ...

最新文章

  1. 朴素贝叶斯--实战分析
  2. HDU.3652.B-number(数位DP)
  3. 使用Castle做类的增强
  4. jdbctemplate mysql 配置_Spring Boot 初级入门教程(十四) —— 配置 MySQL 数据库和使用 JdbcTemplate 测试...
  5. POJ1011———Sticks
  6. AngularJS的 $resource服务 关于CRUD操作
  7. 【跳频通信】基于matlab跳频通信系统仿真【含Matlab源码 967期】
  8. php ddos 防御,PHP DDos的几个防御方法详解
  9. 《思考,快与慢》读书笔记
  10. 决策规划算法三:DP与分层状态机2种决策算法的对比
  11. Java项目:SpringBoot人才求职招聘网站
  12. xp无法访问win7计算机,xp系统无法访问win7的共享文件怎么办
  13. 头条自媒体运营秘籍,坚持下去你就可以打败90%的人
  14. LIN Bus | 一个应用广泛的串行通信协议
  15. SSL用pem和key文件生成jks文件
  16. 【每日新闻】三星电子市值跌至全球第18位,落后中国阿里腾讯 | 中国AI领袖人物吴甘沙:无人驾驶技术距离我们已经不再遥远
  17. [Codeforces Round #628]1325C - Ehab and Path-etic MEXs[思维][图]
  18. 用HTML5解析SWF演示,没有Flash插件照样播放Flash视频
  19. iOS开发Implicit declaration of function 'XXXX' is invalid in C99” 报错问题
  20. 计算哪一年哪个月份有多少天

热门文章

  1. 五分之四的不同表达式_五分之四表示什么?还可以表示什么?
  2. 不用PS,小白也能轻松搞定抠图
  3. 微服务--应对每秒上万并发下的参数优化实战(实战经验)
  4. python提取每个单词首字母_如何将字符串中每个单词的首字母大写(Python)?
  5. 大数据归档-冷热数据分离
  6. 项目日志20190707
  7. 数据库 之带子查询的操作--插入子查询结果、带子查询的修改语句、带子查询的删除语句
  8. 计算机怎么升级64位操作系统,如何将计算机的32位更改为64位
  9. Unity升级2018与Google Android64位支持
  10. 2022 年终奖个税计算方法,看看你被多收割了多少