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