본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

모의 날짜, 타임스탬프, UUID

jest.spyOn()을 사용하여 테스트를 실행하는 모의를 주입함으로써 비결정적 Functions의 결과물을 지정할 수 있습니다.

UUID functions

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 // 필요한 라이브러리와 함수를 불러옵니다. import { MyFunctions } from ".." // MyFunctions 클래스를 불러옵니다. import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; // ontology-api 라이브러리에서 Objects, ExampleDataFlight를 불러옵니다. import { verifyOntologyEditFunction } from "@foundry/functions-testing-lib"; // functions-testing-lib 라이브러리에서 verifyOntologyEditFunction를 불러옵니다. import { Uuid } from "@foundry/functions-utils"; // functions-utils 라이브러리에서 Uuid를 불러옵니다. // 테스트 스위트를 정의합니다. describe("example test suite", () => { const myFunctions = new MyFunctions(); // MyFunctions 클래스의 인스턴스를 생성합니다. // 새로운 비행을 생성하는 테스트를 정의합니다. test("creates new flight", () => { const makeUuid = () => "my-uuid"; // UUID를 생성하는 함수를 정의합니다. jest.spyOn(Uuid, "random").mockImplementation(() => makeUuid()); // Uuid의 random 메소드를 스파이하고, 그것의 구현을 makeUuid 함수로 대체합니다. // Ontology 편집 함수가 새로운 객체를 생성하는지 검증합니다. verifyOntologyEditFunction(() => myFunctions.createNewFlight()) .createsObject({ objectType: ExampleDataFlight, // 생성되어야 하는 객체의 타입을 ExampleDataFlight로 지정합니다. properties: { flightId: makeUuid() // 생성되어야 하는 객체의 flightId 프로퍼티를 설정합니다. } }) }) });

다음 기능을 테스트하는데 사용할 수 있습니다:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // "@foundry/functions-api"에서 Function, OntologyEditFunction, Edits를 가져옵니다. import { Function, OntologyEditFunction, Edits } from "@foundry/functions-api"; // "@foundry/ontology-api"에서 Objects, ExampleDataFlight를 가져옵니다. import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; // "@foundry/functions-utils"에서 Uuid를 가져옵니다. import { Uuid } from "@foundry/functions-utils"; // MyFunctions라는 클래스를 선언합니다. export class MyFunctions { // ExampleDataFlight를 수정하는 함수를 선언합니다. @Edits(ExampleDataFlight) // OntologyEditFunction 장식자를 사용하여 Ontology 수정 함수임을 명시합니다. @OntologyEditFunction() // 새로운 비행 데이터를 생성하는 함수를 선언합니다. public createNewFlight(): void { // Objects.create()를 사용하여 새로운 객체를 생성하고, 이 객체의 exampleDataFlight 필드에 임의의 Uuid를 할당합니다. Objects.create().exampleDataFlight(Uuid.random()); } }

고급 UUID 함수

Uuid의 결과물을 완전히 제어하려는 경우가 있습니다. 이렇게 하려면 테스트하는 함수의 코드를 조정해야 합니다. 예를 들어, 위의 createNewFlight 함수는 MyFunctions 클래스에 래핑되어 있고 기본값이 있는 공급자를 사용하여 클래스에 생성자를 추가할 수 있습니다. 공급자가 있는 업데이트된 함수는 다음과 같습니다:

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 { // 이 클래스의 새로운 생성자는 공급자를 가져옵니다 constructor (private UuidSupplier: () => string = Uuid.random){} @Edits(ExampleDataFlight) @OntologyEditFunction() // 생성자를 사용하여 새로운 비행을 생성하는 함수 public createNewFlightWithConstructor(): void { Objects.create().exampleDataFlight(this.UuidSupplier()); } }

번역된 주석:

  • 이 클래스의 새로운 생성자는 공급자를 가져옵니다: 이 클래스의 새로운 생성자는 공급자를 매개변수로 받습니다. 여기서 공급자는 UUID를 생성하는 함수입니다.
  • 생성자를 사용하여 새로운 비행을 생성하는 함수: 이 함수는 생성자를 통해 받은 UUID 공급자 함수를 사용하여 새로운 비행 데이터를 생성합니다. 함수 자체는 반환값이 없으며 (void), 내부에서 비행 데이터를 생성하고 저장합니다. 이 업데이트된 Function은 결과물을 완전히 제어하여 테스트할 수 있습니다(이 경우 생성된 Uuidmy-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("공급자와 함께 새로운 항공편 생성", () => { // 새로운 MyFunctions 객체 생성 const myNewFunctions = new MyFunctions(() => "my-other-uuid"); // 새로운 항공편 생성 테스트 verifyOntologyEditFunction(() => myNewFunctions.createNewFlightWithConstructor()) .createsObject({ objectType: ExampleDataFlight, properties: { flightId: "my-other-uuid" } }) }) });

Timestamp.now() 함수들

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 import { MyFunctions } from ".." import { Objects , ExampleDataFlight } from "@foundry/ontology-api"; import { verifyOntologyEditFunction } from "@foundry/functions-testing-lib"; import { Timestamp } from "@foundry/functions-api"; // 테스트 스위트 예제 describe("example test suite", () => { // MyFunctions 클래스의 인스턴스 생성 const myFunctions = new MyFunctions(); // "test timestamp now" 테스트 케이스 test("test timestamp now", () => { // 특정 시간의 Timestamp를 생성하는 함수 const makeTimestamp = () => Timestamp.fromISOString("2018-06-13T12:11:13+05:00"); // Timestamp의 now 메소드를 가로채어, 항상 특정 시간의 Timestamp를 반환하도록 목(mock) 설정 jest.spyOn(Timestamp, "now").mockImplementation(() => makeTimestamp()); // 플라이트 객체 생성 const flight = Objects.create().exampleDataFlight("flightAnotherTest"); // startTakeoff 메소드가 플라이트 객체의 takeoff 속성을 정상적으로 변경하는지 검증 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 18 // "@foundry/functions-api"에서 필요한 요소들을 import합니다. import { Function, OntologyEditFunction, Edits, Timestamp } from "@foundry/functions-api"; // "@foundry/ontology-api"에서 필요한 요소들을 import합니다. import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; // MyFunctions라는 클래스를 선언합니다. export class MyFunctions { // ExampleDataFlight을 수정하는 함수를 정의합니다. @Edits(ExampleDataFlight) // 온톨로지 수정 함수를 정의합니다. @OntologyEditFunction() // startTakeoff이라는 public 함수를 선언하고, 이 함수는 ExampleDataFlight 타입의 flight를 매개변수로 받습니다. public startTakeoff(flight: ExampleDataFlight): void { // flight의 이륙 시간을 현재 시간으로 설정합니다. flight.takeoff = Timestamp.now(); } }

LocalDate.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 30 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 now 함수 테스트 test("test LocalDate now", () => { // LocalDate 객체 생성 함수 const makeLocalDate = () => LocalDate.fromISOString("2018-06-13"); // LocalDate.now 함수를 가짜로 구현 jest.spyOn(LocalDate, "now").mockImplementation(() => makeLocalDate()); // Flight 객체 생성 const flight = Objects.create().exampleDataFlight("flightTest"); // Ontology 수정 함수 검증 verifyOntologyEditFunction(() => myFunctions.dateTakeoff(flight)) .modifiesObject({ object: flight, properties: { // 날짜 속성에 LocalDate 객체를 설정 date: makeLocalDate() } }) }) });

다음 함수를 테스트하는 데 사용할 수 있습니다:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import { Function, OntologyEditFunction, Edits, LocalDate } from "@foundry/functions-api"; import { Objects, ExampleDataFlight } from "@foundry/ontology-api"; // 'MyFunctions'라는 클래스를 선언합니다. export class MyFunctions { // 'ExampleDataFlight' 데이터 유형에 대한 수정사항을 선언하는 데코레이터입니다. @Edits(ExampleDataFlight) // 온톨로지 수정 함수를 선언하는 데코레이터입니다. @OntologyEditFunction() // 'dateTakeoff'이라는 public 메서드를 선언하였으며, 이 메서드는 'ExampleDataFlight' 타입의 'flight' 매개변수를 받아서 // 'flight'의 'date' 속성 값을 현재 날짜로 설정합니다. public dateTakeoff(flight: ExampleDataFlight): void { flight.date = LocalDate.now(); } }