高度なMock
高度なMockの詳細をここで見る。
Mockの優先順位
Mockルールの優先順位:高度なMockの期待 > MockのカスタムScript
高度なMockの期待を満たしている場合、MockのカスタムScriptが呼出されません。
Mockの期待
設定:
- 期待する条件:異なるrequestのパラメータによって異なるデータを返します。例えば、次の2つの作成を作成します。
- RequestのパラメータのIDが1の場合、販売ステータスとしてAvaliableを返します。
- RequestのパラメータのIDが1の場合、販売ステータスとしてSoldを返します。
- 期待する条件では、複数のパラメータがサポートされます。すべてのパラメータが全部満たされる場合のみ、当該期待が成り立ちます。
- 期待するでは、等しい、より小さい、より大きい、存在する、含むなど、パラメータ名とパラメータ値の間のマッチング条件をサポートします。
- 期待する条件の「パラメータの場所」をBodyに指定する場合、実際のRequestのBodyは、APIドキュメントで定義されたものと一致にする必要があります。例えば、もしAPIで定義されたのは、BodyのRequestタイプがform-dataになった場合、Mockする時にも当該パラメータをform-dataに置く必要があります。
- 期待する条件:JSONタイプのBodyではJSON Pathでマッチングすることがサポートされます。
- 名前が「\$」から始まるパラメータに対して、JSON Pathを使用してマッチングします。
- 名前が「\$」から始まるのではないパラメータに対して、JSONの第 1レベルの属性名を使用してマッチングします。
- 返されたデータ:APIのRequestで返されたデータを指します。faker.jsとNunjucksを使用する場合、特定のルールに従って動的値を返すことをサポートします。例えば:
{
"data": {
"name": "data returned from advanced mock",
"mockJs": [
"@cname",
"@integer(0,100)",
"@image(80x90)"
],
"nunjucks": [
{% for i in range(0, 3) -%}
{
"id": "{{i}}",
"name": "@cname",
"friends": [
{% for item in ['apple','banana','cat', 'dog'] -%}
"{{item}}",
{%- endfor %}
]
},
{%- endfor %}
]
},
"success": true
}
生成されたデータ:
{
"data": {
"name": "data returned from advanced mock",
"mockJs": ["Meryl Niki", 98, "http://dummyimage.com/80x90"],
"nunjucks": [
{
"id": "0",
"name": "Jeanie Lynsey",
"friends": ["apple", "banana", "cat", "dog"]
},
{
"id": "1",
"name": "Jada Annalise",
"friends": ["apple", "banana", "cat", "dog"]
},
{
"id": "2",
"name": "Gillian Sandy",
"friends": ["apple", "banana", "cat", "dog"]
}
]
},
"success": true
}
- 返されたHeader、返されたHTTPスターテスコード、遅延 Responseをカスタマイズすることをサポートします。
MockのカスタムScripts
カスタムScriptを使用して、ユーザーのRequestからパラメータを取得し、戻り値の内容を変更することをサポートしています。
カスタムScriptを使用して、ユーザーのRequestのパラメータを取得し、返されたメッセージを変更できます。
カスタムScriptは、前処理と後処理Scriptではなく、高度なMockでのみ使用できることに注意してください。
使い方
- 高度なMockをクリックします。
- Javascriptを使用して返されたJSONを編集します。(次のスクリーンショットに示すように)
例1
ページデータを設定する:
// Get mock data from Smart Mock
var responseJson = dog.mockResponse.json();
// Modify the paged data from responseJson
// Set page as the page in request parameter
responseJson.page = parseInt(dog.mockRequest.getParam("page"));
// Set total as 120
responseJson.total = 120;
// Write the modified json into dog.mockResponse
dog.mockResponse.setBody(responseJson);
例2
var MockJs = require("mockjs");
// Get JSON from Smart Mock
var responseJson = dog.mockResponse.json();
// Modify response value based on request parameters (including query, body, and path)
if (dog.mockRequest.getParam("id") === "123") {
responseJson.data = null;
responseJson.code = 400104;
responseJson.errorMessage = "data not exists";
dog.mockResponse.setBody(responseJson);
dog.mockResponse.setCode(404);
}
// Modify response value based on header
if (!dog.mockRequest.headers.get("token")) {
responseJson.data = null;
responseJson.code = 400103;
responseJson.errorMessage = "No permission";
dog.mockResponse.setBody(responseJson);
dog.mockResponse.setCode(403);
}
// Modify response value based on cooked
if (dog.mockRequest.cookies.get("projectId") === "123") {
var idList = [1, 2, 3, 4, 5, 6, 7, 8];
dog.mockResponse.setBody({
code: 0,
data: idList.map(function(id) {
return {
id: id,
name: MockJs.mock("@cname"),
email: MockJs.mock("@email"),
city: MockJs.mock("@city"),
};
}),
});
}
// Set delay for response
dog.mockResponse.setDelay(500);
// Add header
dog.mockResponse.headers.add({
key: "X-Token",
value: "<token>",
});
// Add or modify header
dog.mockResponse.headers.upsert({
key: "X-Token",
value: "<token>",
});
Request: dog.mockRequest
- dog.mockRequest.headers: リクエストのHeaderをMockする
- dog.mockRequest.cookies: リクエストのCookieをMockする
- dog.mockRequest.getParam(key: string): リクエストのパラメータ(Pathパラメータ、Bodyパラメータ、Queryパラメータを含む)を取得する
Response: dog.mockResponse
- dog.mockResponse.headers: ResponseのHeaderをMockする
- dog.mockResponse.code: システムによって自動生成されたHTTPコード
- dog.mockResponse.json(): システムによって自動生成されたJSON 形式のResponse
- dog.mockResponse.setBody(body: any): MockのResponseのBodyを設定する(JSONとStringをサポート)
- dog.mockResponse.setCode(code: number): MockのResponseから返したHTTPコードを設定する
- dog.mockResponse.setDelay(duration: number): MockのResponseの遅延(ms 単位)を設定する