メインコンテンツまでスキップ

高度なMock

高度なMockの詳細をここで見る。

Mockの優先順位

Mockルールの優先順位:高度なMockの期待 > MockのカスタムScript

高度なMockの期待を満たしている場合、MockのカスタムScriptが呼出されません。

Mockの期待

apidog 設定:

apidog

  1. 期待する条件:異なるrequestのパラメータによって異なるデータを返します。例えば、次の2つの作成を作成します。
    • RequestのパラメータのIDが1の場合、販売ステータスとしてAvaliableを返します。
    • RequestのパラメータのIDが1の場合、販売ステータスとしてSoldを返します。
  2. 期待する条件では、複数のパラメータがサポートされます。すべてのパラメータが全部満たされる場合のみ、当該期待が成り立ちます。
  3. 期待するでは、等しい、より小さい、より大きい、存在する、含むなど、パラメータ名とパラメータ値の間のマッチング条件をサポートします。
  4. 期待する条件の「パラメータの場所」をBodyに指定する場合、実際のRequestのBodyは、APIドキュメントで定義されたものと一致にする必要があります。例えば、もしAPIで定義されたのは、BodyのRequestタイプがform-dataになった場合、Mockする時にも当該パラメータをform-dataに置く必要があります。
  5. 期待する条件:JSONタイプのBodyではJSON Pathでマッチングすることがサポートされます。
    • 名前が「\$」から始まるパラメータに対して、JSON Pathを使用してマッチングします。
    • 名前が「\$」から始まるのではないパラメータに対して、JSONの第 1レベルの属性名を使用してマッチングします。
  6. 返されたデータ: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
}
  1. 返されたHeader、返されたHTTPスターテスコード、遅延 Responseをカスタマイズすることをサポートします。

MockのカスタムScripts

カスタムScriptを使用して、ユーザーのRequestからパラメータを取得し、戻り値の内容を変更することをサポートしています。

カスタムScriptを使用して、ユーザーのRequestのパラメータを取得し、返されたメッセージを変更できます。

カスタムScriptは、前処理と後処理Scriptではなく、高度なMockでのみ使用できることに注意してください。

使い方

  1. 高度なMockをクリックします。
  2. Javascriptを使用して返されたJSONを編集します。(次のスクリーンショットに示すように)

apidog

例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 単位)を設定する