파일 읽기/쓰기 모듈이 있는 Deno입니다.test
import { FunctionDeclaration } from "https://deno.land/x/[email protected]/mod.ts";
type Parameter = { name: string; type: string };
type Entry = { parameters: Parameter[] };
export const addCustomEntries = (
entries: Entry[],
constructor: FunctionDeclaration
) => {
constructor.addOverloads(
entries.map((entry) => ({
parameters: entry.parameters,
returnType: "string",
}))
);
};
helper의 정의
파일을 읽고 쓰기 위한 앞뒤 처리를 위한 조수 함수를 정의합니다.
helper.ts
import {
Project,
SourceFile,
ManipulationSettings,
IndentationText,
} from "https://deno.land/x/[email protected]/mod.ts";
export const withDir = async (
cb: (tempDir: string) => void | Promise<void>
) => {
const tempDir = await Deno.makeTempDir({
prefix: "deno_couscous_test_",
});
await cb(tempDir);
await Deno.remove(tempDir, { recursive: true });
};
export const withSource = (
cb: (tempSrc: SourceFile) => void | Promise<void>,
manipulationSettings: Partial<ManipulationSettings> = {
indentationText: IndentationText.TwoSpaces,
}
) =>
withDir(async (tempDir) => {
const tempFile = await Deno.makeTempFile({ dir: tempDir });
const project = new Project({
libFolderPath: tempDir,
manipulationSettings,
});
const source = project.addSourceFileAtPath(tempFile);
await cb(source);
});
파일 간의 결단을 비교하는 정의까지.assertEqualFiles.ts
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
export const assertEqualFile = async (
receivedPath: string,
expectedPath: string
) => {
const [received, expected] = await Promise.all([
Deno.readTextFile(receivedPath),
Deno.readTextFile(expectedPath),
]);
await assertEquals(received, expected);
};
테스트 용례의 설치
이번에는 스냅샷 테스트의 출력 결과를 엄격하게 인코딩했지만 설치 방법에 따라 자동으로 생성할 수 있다.
output.ts.snapshot
function hoge(piyo: string): string;
function hoge(piyo: string, foo: number): string;
function hoge(foo: number, bar: boolean): string;
function hoge(piyo: string, foo: number, bar: number): string;
function hoge() {
return ""
}
오버로드 검사이기 때문에 함수 자체의 검사가 포함되지 않기 때문에 테스트 전에 최소한의 설치를 추가합니다.test.ts
import { StructureKind } from "https://deno.land/x/[email protected]/mod.ts";
import { withSource } from "./helper.ts";
import { assertEqualFile } from "./assertEqualFiles.ts";
import { addCustomEntries } from "./mod.ts";
Deno.test(
"addCustomEntries",
{ permissions: { read: true, write: true } },
() =>
withSource(async (source) => {
const constructor = source.addFunction({
name: "hoge",
kind: StructureKind.Function,
statements: 'return ""',
});
addCustomEntries(
[
{
parameters: [{ name: "piyo", type: "string" }],
},
{
parameters: [
{ name: "piyo", type: "string" },
{ name: "foo", type: "number" },
],
},
{
parameters: [
{ name: "foo", type: "number" },
{ name: "bar", type: "number" },
],
},
{
parameters: [
{ name: "piyo", type: "string" },
{ name: "foo", type: "number" },
{ name: "bar", type: "number" },
],
},
],
constructor
);
await source.save();
assertEqualFile(source.getFilePath(), "output.ts.snapshot");
})
);
실행 결과
추기의 여담
denotest를 실행할 때 로고를 제출할 수 있기 때문에 업데이트용 로고를 추가하면 스냅샷의 결과를 자동으로 업데이트할 수 있습니다.
import {
assertEquals,
equal,
} from "https://deno.land/[email protected]/testing/asserts.ts";
import { copy } from "https://deno.land/[email protected]/fs/mod.ts";
export const assertSnapshot = async (
receivedPath: string,
expectedPath: string
) => {
const [received, expected] = await Promise.all([
Deno.readTextFile(receivedPath),
Deno.readTextFile(expectedPath),
]);
if (Deno.args.includes("update_snapshot")) {
if (equal(received, expected)) return;
await copy(receivedPath, expectedPath, { overwrite: true });
} else {
assertEquals(received, expected);
}
};
스냅샷 업데이트 플래그를 추가할 수 있습니다.🎉deno test test.ts --allow-read --allow-write -- update_snapshot
Reference
이 문제에 관하여(파일 읽기/쓰기 모듈이 있는 Deno입니다.test), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tera_ny/articles/f3772a0893ff17텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)