如何用Moco-runner搭建测试服务器

如何用Moco-runner搭建测试服务器,第1张

moco目前支持多种使用方式,最基本的方式是两种:API和独立运行。本文主要讲解独立运行的sever搭建。

独立运行:moco主要是通过将配置放入json文件中,启动moco的时候,需要指定使用的配置文件路径,这样配置就可以生效了。配置文件工作原理大致如下:

moco框架是github上的一个开源项目,本身支持API和独立运行两种方式。通过使用API,开发人员可以在JUnit、JBehave等测试测试框架里使用Moco,极大程度地降低了集成点测试的复杂度

moco可提供一下服务:

此部分不再赘述

moco目录结构如下:

其中moco.json用来存放mock的内容,内容如下:

说明:

-p:启动后服务器应用所占用的端口号

-c:mock数据的内容文件

Service的典型示例

在AngularJS中,Service都是单例的实体,通常会将Service作为向后台交互的数据提供者,所有的需要数据的组件只需要依赖于这个Service即可。

var app = angular.module('MyApp', [])

app.factory('SearchSettingService',

['$http', '$q', function($http, $q) {

return {

setting: function() {

var deferred = $q.defer()

$http.get('/settings.json').success(function(result) {

deferred.resolve(result)

}).error(function(result) {

deferred.reject("network error")

})

return deferred.promise

}

}

}])

$httpBackend

测试的时候,我们不需要真实的发送HTTP请求来获取数据。如果可以只测试Service的逻辑,当发送请求时,我们将这个请求拦截下来,然后返回一个预定义好的数据即可:

it('should have settings from http request', function() {

var result

var expected = {

"period": "day",

"date": "Sat Dec 21 12:56:53 EST 2013",

}

httpBackend.expectGET('/settings.json').respond(expected)

var promise = settingService.setting()

promise.then(function(data) {

result = data

})

httpBackend.flush()

expect(result).toEqual(expected)

})

$httpBackend是AngularJS提供的一个测试用的服务,可以在spec中注入进来:

beforeEach(function() {

module('services')

inject(function(SearchSettingService, $httpBackend) {

settingService = SearchSettingService

httpBackend = $httpBackend

})

})

httpBackend服务有一些很方便测试的方法:

httpBackend.expectGET(url).respond(data)

httpBackend.expectPOST(url, param).respond(data)

设置之后,当调用httpBackend.flush时,AngularJS会调用这个setup,发送的请求会被之前的setup拦截并返回,这样service中的数据就被填充好了。

Service测试的模板

或者说,当测试一个Service时,我们应该测那些方面呢?

正常流程,一个完整的处理过程

异常处理,如果服务器出错了,程序需要如何反馈?

其他异常情况

正常流程很容易,在调用service提供的方法之后,在获得的promise对象上调用then方法来填充一个数据即可,然后调用httpBackend.flush()来发送请求,最后验证数据的格式/内容是否正确。

这个测试的主要目的是验证当调用service的方法时,service真实的发送了一个http请求:

it('should have settings from http request', function() {

var result

var expected = {

"period": "day",

"date": "Sat Dec 21 12:56:53 EST 2013",

}

httpBackend.expectGET('/settings.json').respond(expected)

var promise = settingService.setting()

promise.then(function(data) {

result = data

})

httpBackend.flush()

expect(result).toEqual(expected)

})

对于异常的情况,比如服务器返回了错误,如500,那么最低程度,程序应该可以处理这个异常:

it("should throw error when network expection", function() {

var result, error

httpBackend.expectGET('/settings.json').respond(500)

var promise = settingService.setting()

promise.then(function(data) {

result = data

}, function(data) {

error = data

})

httpBackend.flush()

expect(result).toBeUndefined()

expect(error).toEqual("network error")

})

服务器 moco

moco是同事郑晔开发的一个测试框架/工具,基本上来说,moco是一个用来集成测试的用的HTTP服务器。

你可以通过API方式或者启动moco服务器的方式来使用它,我比较喜欢将moco作为一个独立的服务器来使用:

java -jar moco-runner-0.9-standalone.jar start -p 12306 -c moco.conf.json

比如moco.conf.json中定义了一下规则:

{

"request": {

"method": "post",

"uri": "/resource"

},

"response": {

"status": 201,

"text": "resource has been created"

}

},

{

"request": {

"uri": "/resource"

},

"response": {

"status": 200,

"file": "resources.json"

}

}

]

则启动moco的服务器之后,所有发往/resource的post请求都会得到

resource has been created

的HTTP响应,这个功能在前端开发越来越独立的情况下变得非常好用。我最近在有很多小项目中都在尝试moco,非常的好用,后边会有相关的博客专门介绍。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/395839.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存