💭

GASのテストについて

2024/05/30に公開

初めに

今回のタスクは、kintoneアプリからスプレットシートに情報を渡す
というタスクでした。
修正自体は簡単でしたが、テストをどうやるかで時間を使ってしまいましたので
共有します。
以下の2つの方法を試しましたが、GASのみでテストパラメーターを作成して、実行
を行った方が簡単でデバッグしやすかった!

愚直にkintone→GASを動かす

kintoneのアプリから愚直に指定したパラメーターを入力し、GASに対してpostする方法

//kintone側
const misocaEvents = ['app.record.edit.submit'];
  kintone.events.on(misocaEvents, async (event) => {

		//色々な処理

	const spreadSheetRecord = async (record) => {

		//色々な処理

		const header = {
	      'Content-Type': 'application/json; charset=UTF-8',
	    };
	    const resp = await kintone.proxy(SCRIPT_URL, 'POST', header, body);
	    console.log(resp);
	    return resp;
	  };

}

SCRIPT_URL で対象のpost先のurlを指定している。

// 請求書管理表連携のURL
  const SCRIPT_URL = window.PROPS.script_url;

window.PROPS.script_url =
    'https://script.google.com/macros/s/XXXXXXXXXXXXXXX/exec';

外部の API を実行する

GASのみでテストパラメーターを作成して、実行

以下では、test.gsを作成してMain.gsを実行しています。

テストデータは、kintoneでpostするパラメータをコピーして

repに直接代入しています。

test.gs

function testDoPost() {
  // テストデータをセットアップ
  const rep = {
    billingCompany: undefined,
    billingDate: "2023-09-30",
    devEnv: false,
    dueDatePaper: "2023-09-05 01:00",
    expenses: "0",
    irregular: undefined,
    lackTime: "0",
    mailingMethod: "データ",
    misocaUrl: "https://app.misoca.jp/invoices/undefined",
    overTime: "141",
    paymentDate: "2023-10-13",
    positionManager: undefined,
    recordNo: "10562",
    sendingMethod: "Misoca",
    subtotal: "0",
    subtotalInTax: "0",
    timeUnit: undefined,
    total: "0",
    travelCost: "0",
    travelCostUrl: undefined,
    trgMonth: "2023年9月分",
    workTime: "141",
    workTimeSheet: "不要",
    workTimeSheetUrl: undefined,
    workerManager: undefined,
    workerName: "TESTTEST"
  }

	main(req)
}

Main.gs

function doPost(e) {
  const req = JSON.parse(e.postData.contents);
  return main(req);
}

function main(req) {
	// 色々な処理
};

まとめ

単体テストとしては、kintone側・GAS側でテストを実施した後に処理がうまく通ることを確認する。
最後に実際の運用を想定して結合テストを行った方がわかりやすくて良いなと感じました。
GASの検証どうしようかと迷っていたところ佐藤さんから共有いただいた上記方法を試してみました!
先人の知恵ありがたい!

Discussion