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

效果如下:

wKioL1UBNZaSe53YAADBTP3hMA0563.jpg

在浏览器输入 http://localhost:12306,就能看到如下结果:

wKiom1UBNHfCHyfuAACCUSOZlb0377.jpg


全局配置


我们可以将配置项配置到一个文件中,也可以分散到多个文件中,我们一个一个解释,先看一下配置到一个文件中的情况:

将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