Moco 是一个轻量级的打桩框架,这个是构建在http协议上的,并且支持 Web service , REST等。对于前端来说,是实现前后端分离的关键,我们可以通过Moco配置返回数据模拟服务器返回的真实数据。我接下来将写两篇文章介绍怎么测试angular的controller和service,将用到Moco,这篇文章就作为铺垫吧。
Moco快速入门:
首先,从 repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.10.0/moco-runner-0.10.0-standalone.jar ,这个jar可以单独运行。
接下来,在某个目录下建立一个moco.conf.js文件,输入以下内容:
[ { "response" : { "text" : "Hello, Moco" } } ]
有了这两个文件,就可以运行Moco了(当然你的电脑上已经配置Java环境),启动命令行,切换到jar包的目录下,运行如下命令:
java -jar moco-runner-0.10.0-standalone.jar http -p 12306 -c moco.conf.json
效果如下:
在浏览器输入 http://localhost:12306,就能看到如下结果:
全局配置
我们可以将配置项配置到一个文件中,也可以分散到多个文件中,我们一个一个解释,先看一下配置到一个文件中的情况:
将moco.conf.json修改为如下:
[ { "request" : { "uri" : "/foo" }, "response" : { "text" : "This is test refer to /foo" } }, { "request" : { "uri" : "/bar" }, "response" : { "text" : "This is bar refer to /bar" } } ]
你可以重新在浏览器中输入 http://localhost:12306/foo 和 http://localhost:12306/bar,可以看下各自的结果。配置文件中每个对象对应一个请求的url和response。这个很容易理解。
下面我们看下将配置文件分散到多个文件中的情况
新建文件bar.json,并输入以下内容:
[ { "request" : { "uri" : "/bar" }, "response" : { "text" : "This is bar refer to /bar" } } ]
新建文件bar.json,并输入以下内容:
[ { "request" : { "uri" : "/foo" }, "response" : { "text" : "This is test refer to /foo" } } ]
新建setting.json,并输入以下内容:
[ { "include" : "foo.json" }, { "include" : "bar.json" } ]
这种情况下运行的命令行做些稍微的改变,完整的命令如下:
java -jar moco-runner-0.10.0-standalone.jar start -p 12306 -g setting.json
继续在浏览器中输入 http://localhost:12306/foo 和 http://localhost:12306/bar,你会发现能得到和上面相同的结果。是不是挺爽,有了这个功能就可以假数据分散到多个json文件中了,一种业务逻辑一个json文件。
还可以给配置文件指定映射,先看一个简单的例子,我们将setting.json文件修改一下,修改内容如下:
[ { "context" : "/foo", "include" : "foo.json" }, { "context" : "/bar", "include" : "bar.json" } ]
在浏览器中输入http://localhost:12306/foo/foo 和 http://localhost:12306/bar/bar,会看到同样的结果。
返回文件的配置暂时省略,我已经写好一个例子,有需要可以联系我。
全局的Request 和Response
在REST请求中,有时候需要处理header,这时候全局的request和response就帮到你。
request
[ { "request" : { "headers" : { "foo" : "bar" } }, "include": "blah.json" } ]
这种配置,只有request中有foo时才接收数据。
response
[ { "response" : { "headers" : { "foo" : "bar" } }, "include": "blah.json" } ]
这种配置,当你向服务器发送任一个请求,都将返回包含foo的header。
最后补充一点其他的命令行:
启动https服务:
java -jar moco-runner-<version>-standalone.jar https -p 12306 -c foo.json --https /path/to/cert.jks --cert mocohttps --keystore mocohttps
启动socket服务:
java -jar moco-runner-<version>-standalone.jar socket -p 12306 -c foo.json