太原软件测试培训
达内太原软件测试培训中心

0351-5618167

热门课程

利用 Sinon 测试 AJAX 请求

  • 时间:2016-08-15 14:31
  • 发布:Harttle Land
  • 来源:Harttle Land

利用 Sinon 测试 AJAX 请求

测试工作就是看新研发的程序或者软件有没有出问题或者不当的地方,因此测试的时候就应该利用各种方式方法。

Web前端测试中,常常会需要测试AJAX行为。 为了简化测试的环境要求需要提供虚拟的测试环境。 Sinonjs 在这方面提供了两类API

Fake XMLHttpRequest:覆盖DOM API中的XHR。使得我们可以捕获所有用户构建的XHR对象,包括直接构造的 XMLHttpRequest ,也包括通过jQuery等工具构造的。因此可以测试XHR构造是否正确。

Fake ServerMock服务器行为。如果我们只希望Mock服务器的Response,可以使用Fake Server

Fake XMLHttpRequest

sinon.useFakeXMLHttpRequest() API用于创建一个Fake对象, 使用该对象可捕获所有新构造的 XMLHttpRequest ( ActiveXObject )实例。

Fake/Restore

通常在测试开始时进行fake,测试结束后恢复相关的DOM对象:

describe('xhr', function(){

var xhr, fake;

before(function(){

fake = sinon.useFakeXMLHttpRequest();

fake.onCreate = function(_xhr){ xhr = _xhr; };

});

after(function(){

fake.restore();

});

});

上述代码基于Mocha测试框架,参考: 利用 Mocha 进行 BDD 风格测试

测试XHR对象

然后在useFake后调用 $.get() jQuery会生成一个XHR对象, 该对象会被 fake.onCreate() 回调捕捉捕捉到并赋值给 xhr

下面对该XHR对象进行测试:

it('should GET url: http://harttle.com', function() {

var $.get('http://harttle.com');

expect(xhr.url).to.equal('http://harttle.com');

expect(xhr.method).to.equal('GET');

});

Fake Response

useFakeXMLHttpRequest 允许对每个 xhr 给出HTTP响应,即 useFakeXMLHttpRequest 包含了 useFakeServer 的功能。

$.get('http://harttle.com');

xhr.respond(200, { 'Content-Type': 'text/plain' }, 'okay');

expect(xhr.responseText).to.equal('okay');

虽然DOM XHR是异步的,但Fake XHR是同步的

Fake Server

sinon.fakeServer() 的功能是 sinon.useFakeXMLHttpRequest 功能的一部分。 但提供了更加方便的Request/Response映射。 如果我们只是希望Mock服务器行为而不关心XHR对象本身,可以使用 useFakeServer() API

Fake/Restore

同样地,首先进行Fake和恢复:

describe('server', function(){

before(function() {

server = sinon.fakeServer.create();

server.respondWith('GET', 'http://harttle.com',

[200, {'Content-Type': 'text/plain'}, 'harttleland']);

});

after(function() {

server.restore();

});

});

测试AJAX

然后开始测试AJAX行为,注意异步方法需要返回Promise,让Mocha等待该异步过程结束。

it('should respond with 200 harttleland', function() {

reuturn $.get('http://harttle.com')

.then(function(result){

expect(result).to.equal('harttleland');

});

});

好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:面试题之 Java 与 Android 基础
下一篇:Nullable和__kindof的使用

华为正在测试基于Android P开发的EMUI8.2系统

太原软件测试培训--对话Pauly Comtois:赫斯特商业媒体中的企业DevOps采用

太原软件测试培训--在选择数据库的路上,我们遇到过哪些坑?

jquery动画之queue和dequeue

选择城市和中心
贵州省

广西省

海南省