注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
非決定的な関数の出力を指定するために、jest.spyOn()
を使用してモックを注入し、テストを実行することができます。
Uuid
の出力をモックで指定することができます。以下に例を示します:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
// 必要なモジュールをインポートする import { MyFunctions } from ".." import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; import { verifyOntologyEditFunction } from "@foundry/functions-testing-lib"; import { Uuid } from "@foundry/functions-utils"; // テストスイートを定義する describe("example test suite", () => { // MyFunctionsクラスのインスタンスを作成する const myFunctions = new MyFunctions(); // 新しいフライトの作成をテストする test("creates new flight", () => { // UUIDを生成する関数を定義する const makeUuid = () => "my-uuid"; // Uuid.randomをモック化し、makeUuid関数を実装する jest.spyOn(Uuid, "random").mockImplementation(() => makeUuid()); // myFunctions.createNewFlight()が新しいオブジェクトを作成することを検証する verifyOntologyEditFunction(() => myFunctions.createNewFlight()) .createsObject({ // 作成されるオブジェクトのタイプとプロパティを定義する objectType: ExampleDataFlight, properties: { flightId: makeUuid() } }) }) });
これは、以下の関数をテストするために使用できます:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import { Function, OntologyEditFunction, Edits } from "@foundry/functions-api"; import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; import { Uuid } from "@foundry/functions-utils"; export class MyFunctions { // ExampleDataFlightを編集 @Edits(ExampleDataFlight) // オントロジー編集関数 @OntologyEditFunction() // 新しいフライトを作成する関数 public createNewFlight(): void { // ExampleDataFlightオブジェクトを作成し、ランダムなUUIDを割り当てる Objects.create().exampleDataFlight(Uuid.random()); } }
Uuid
の出力に完全に制御したい場合があります。これには、テストしている関数のコードを調整する必要があります。例えば、上記の createNewFlight
関数は、MyFunctions
というクラスでラップされており、デフォルト値を持つサプライヤを引数に取るコンストラクタをクラスに追加することができます。サプライヤを使用した更新された関数は、以下のようになります。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import { Function, OntologyEditFunction, Edits } from "@foundry/functions-api"; import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; import { Uuid } from "@foundry/functions-utils"; export class MyFunctions { // この新しいコンストラクタは、クラス内でサプライヤを受け取ります constructor (private UuidSupplier: () => string = Uuid.random){} // ExampleDataFlightを編集するためのデコレータ @Edits(ExampleDataFlight) // オントロジー編集用の関数デコレータ @OntologyEditFunction() // 新しいフライトを作成するメソッド public createNewFlightWithConstructor(): void { // UUIDサプライヤを使用して新しいフライトを作成 Objects.create().exampleDataFlight(this.UuidSupplier()); } }
この更新された関数は、出力を完全に制御してテストすることができます(この場合、生成されたUuid
をmy-other-uuid
に設定します):
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import { MyFunctions } from ".." import { Objects , ExampleDataFlight } from "@foundry/ontology-api"; import { verifyOntologyEditFunction } from "@foundry/functions-testing-lib"; import { Uuid } from "@foundry/functions-utils"; describe("例のテストスイート", () => { const myFunctions = new MyFunctions(); test("サプライヤーとともに新しいフライトを作成する", () => { // my-other-uuid を持つ新しい MyFunctions インスタンスを作成 const myNewFunctions = new MyFunctions(() => "my-other-uuid"); verifyOntologyEditFunction(() => myNewFunctions.createNewFlightWithConstructor()) // 以下のオブジェクトを作成することを検証 .createsObject({ objectType: ExampleDataFlight, // オブジェクトタイプは ExampleDataFlight properties: { flightId: "my-other-uuid" // flightId は my-other-uuid } }) }) });
Timestamp.now()
の出力をモックを注入することで指定できます。以下に例を示します:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import { MyFunctions } from ".." // オントロジAPIから必要なオブジェクトをインポート import { Objects , ExampleDataFlight } from "@foundry/ontology-api"; // 関数のテスト用にverifyOntologyEditFunctionをインポート import { verifyOntologyEditFunction } from "@foundry/functions-testing-lib"; // Timestampオブジェクトをインポート import { Timestamp } from "@foundry/functions-api"; // テストスイートを定義 describe("example test suite", () => { // MyFunctionsのインスタンスを作成 const myFunctions = new MyFunctions(); // タイムスタンプのテストケース test("test timestamp now", () => { // タイムスタンプを作成する関数 const makeTimestamp = () => Timestamp.fromISOString("2018-06-13T12:11:13+05:00"); // Timestamp.now()の実装をモック化 jest.spyOn(Timestamp, "now").mockImplementation(() => makeTimestamp()); // フライトオブジェクトの作成 const flight = Objects.create().exampleDataFlight("flightAnotherTest"); // 関数のテスト verifyOntologyEditFunction(() => myFunctions.startTakeoff(flight)) // オブジェクトが正しく変更されているか確認 .modifiesObject({ object: flight, properties: { takeoff: makeTimestamp() } }) }) });
この関数のテストに使用できます:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// "@foundry/functions-api"から必要なモジュールをインポートします。 import { Function, OntologyEditFunction, Edits, Timestamp } from "@foundry/functions-api"; // "@foundry/ontology-api"から必要なモジュールをインポートします。 import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; // MyFunctionsという名前のクラスをエクスポートします。 export class MyFunctions { // Editsデコレーターを使用して、ExampleDataFlightオブジェクトに対する編集を示します。 @Edits(ExampleDataFlight) // OntologyEditFunctionデコレーターを使用して、この関数がオントロジー編集関数であることを示します。 @OntologyEditFunction() // startTakeoffという名前のパブリックメソッドを定義します。このメソッドはExampleDataFlightオブジェクトを引数に取り、何も返しません。 public startTakeoff(flight: ExampleDataFlight): void { // フライトの離陸時刻を現在の時刻に設定します。 flight.takeoff = Timestamp.now(); } }
LocalDate.now()
の出力はモックを注入することで指定できます。以下に例を示します:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import { MyFunctions } from ".." import { Objects , ExampleDataFlight } from "@foundry/ontology-api"; import { verifyOntologyEditFunction } from "@foundry/functions-testing-lib"; import { LocalDate } from "@foundry/functions-api"; // 例のテストスイート describe("example test suite", () => { const myFunctions = new MyFunctions(); // LocalDateの現在時刻のテスト test("test LocalDate now", () => { // 2018-06-13のLocalDateを生成する関数 const makeLocalDate = () => LocalDate.fromISOString("2018-06-13"); // LocalDate.now()の挙動を上書き jest.spyOn(LocalDate, "now").mockImplementation(() => makeLocalDate()); // フライトオブジェクトの生成 const flight = Objects.create().exampleDataFlight("flightTest"); // dateTakeoff関数の検証 verifyOntologyEditFunction(() => myFunctions.dateTakeoff(flight)) .modifiesObject({ object: flight, properties: { date: makeLocalDate() } }) }) });
次の関数をテストするために使用できます:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// "@foundry/functions-api" からいくつかのクラスと関数をインポートします import { Function, OntologyEditFunction, Edits, LocalDate } from "@foundry/functions-api"; // "@foundry/ontology-api" からもいくつかのクラスと関数をインポートします import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; // MyFunctionsというクラスをエクスポートします export class MyFunctions { // ExampleDataFlightを編集することを示すデコレータ @Edits(ExampleDataFlight) // OntologyEditFunctionというデコレータ @OntologyEditFunction() // dateTakeoffというパブリックメソッド。引数としてflight(ExampleDataFlightのインスタンス)をとります public dateTakeoff(flight: ExampleDataFlight): void { // flightのdateプロパティに現在の日付を設定します flight.date = LocalDate.now(); } }