Skip to content

Deno

Hello World

Directory Structure

sh
.
└── src
    └── main.ts
sh
function greet(name: string): string {
    return `Hello, ${name}!`;
  }
  
  console.log(greet("world"));
sh
deno src/main.ts
Hello, world!

Formatting

Directory Structure

sh
.
├── deno.json
└── src
    ├── fizz-buzz
   └── index.ts
    └── main.ts
json
{
    // deno fmtコマンド設定
    "fmt": {
     // 行末にセミコロンを付加するかどうか
      "useTabs": true,
      // 1行当たりの文字数
      "lineWidth": 80,
      // インデント幅
      "indentWidth": 4,
      // 引用符にシングルクォーテーションとダブルクォーテーションのどちらを使用するか
      "semiColons": true,
      // 引用符にシングルクォーテーションとダブルクォーテーションのどちらを使用するか
      "singleQuote": true,
      // Markdownファイル内での文章の改行方法
      // 元の状態を保持し、既存の改行をそのまま残す
      "proseWrap": "preserve",
      // 文章が特定の行の長さに達したら、自動で折り返す。
      // "proseWrap": "always",
      // 行を折り返さず、テキストを一行にする。
      // "proseWrap": "never" 
      // フォーマット対象に含めるファイル
      "include": ["src/"],
      // フォーマット対象から除外するファイル
      "exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
    }
  }

format before

ts
export const fizzBuzz = (number: number): string => {
    if (number % 15 === 0) return "FizzBuzz";
    if (number % 3 === 0) return "Fizz";
    if (number % 5 === 0) return "Buzz";
    return number.toString();
};

"'に変更。

format after

ts
export const fizzBuzz = (number: number): string => {
	if (number % 15 === 0) return 'FizzBuzz';
	if (number % 3 === 0) return 'Fizz';
	if (number % 5 === 0) return 'Buzz';
	return number.toString();
};

Custom Format

json
{
  "fmt": {
    "useTabs": false,
    "lineWidth": 120,
    "indentWidth": 2,
    "singleQuote": true,
    "semiColons": false,
    "include": ["./"]
  }
}

format before

ts
export const fizzBuzz = (number: number): string => {
    if (number % 15 === 0) return "FizzBuzz";
    if (number % 3 === 0) return "Fizz";
    if (number % 5 === 0) return "Buzz";
    return number.toString();
};

format after

ts
export const fizzBuzz = (number: number): string => {
  if (number % 15 === 0) return 'FizzBuzz'
  if (number % 3 === 0) return 'Fizz'
  if (number % 5 === 0) return 'Buzz'
  return number.toString()
}

Other

  • "indentWidth": 10に変更してみる。
deno.json
json
{
          "fmt": {
                    "useTabs": false,
                    "lineWidth": 120,
                    "indentWidth": 10,
                    "singleQuote": true,
                    "semiColons": false,
                    "include": ["./"]
          }
}

format before

ts
export const fizzBuzz = (number: number): string => {
    if (number % 15 === 0) return "FizzBuzz";
    if (number % 3 === 0) return "Fizz";
    if (number % 5 === 0) return "Buzz";
    return number.toString();
};

format after

ts
export const fizzBuzz = (number: number): string => {
          if (number % 15 === 0) return 'FizzBuzz'
          if (number % 3 === 0) return 'Fizz'
          if (number % 5 === 0) return 'Buzz'
          return number.toString()
}

Linting

json
{
  "lint": {
    // lint対象に含めるファイル
    "include": ["src/"],
    // lint対象から除外するファイル
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"],
    "rules": {
      // ベースのルールセット
      "tags": ["recommended"],
      // tagsで指定したルールに対して追加したいルール
      "include": ["ban-untagged-todo"],
    //   tagsで指定したルールに対して除外したいルール
      "exclude": ["no-unused-vars"]
    }
  }
}

Example

 使用されていない変数に対して、警告を出す。

json
{
  "lint": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"],
    "rules": {
      "tags": ["recommended"],
      "include": ["ban-untagged-todo", "no-unused-vars"],
      "exclude": []
    }
  }
}
ts
const fizz_buzz = 'fizz_buzz'

export const fizzBuzz = (number: number): string => {
  if (number % 15 === 0) return 'FizzBuzz'
  if (number % 3 === 0) return 'Fizz'
  if (number % 5 === 0) return 'Buzz'
  return number.toString()
}
sh
deno lint
error[no-unused-vars]: `fizz_buzz` is never used
 --> /workspaces/deno-test/src/fizz-buzz/index.ts:1:7
  | 
1 | const fizz_buzz = 'fizz_buzz'
  |       ^^^^^^^^^
  = hint: If this is intentional, prefix it with an underscore like `_fizz_buzz`

  docs: https://lint.deno.land/rules/no-unused-vars


Found 1 problem
Checked 2 files
ts
const fizz_buzz: any = "fizz_buzz";
console.log(fizz_buzz);

export const fizzBuzz = (number: number): string => {
  if (number % 15 === 0) return "FizzBuzz";
  if (number % 3 === 0) return "Fizz";
  if (number % 5 === 0) return "Buzz";
  return number.toString();
};
sh
deno lint
error[no-explicit-any]: `any` type is not allowed
 --> /workspaces/deno-test/src/fizz-buzz/index.ts:1:18
  | 
1 | const fizz_buzz: any = "fizz_buzz";
  |                  ^^^
  = hint: Use a specific type other than `any`

  docs: https://lint.deno.land/rules/no-explicit-any


Found 1 problem
Checked 2 files

compilerOptions

json
{
  "compilerOptions": {
    // jsファイルもコンパイル対象
    "allowJs": true,
    // deno.windowという特定のライブラリを使用するように指定
    "lib": ["deno.window"],
    // TypeScriptコンパイラの厳密な型チェックを有効にするオプション
    "strict": true
  }
}

Testing

.
├── deno.json
└── src
    ├── fizz-buzz
    │   ├── index.test.ts
    │   └── index.ts
    └── main.ts
ts
import { assertEquals } from 'jsr:@std/assert'
import { fizzBuzz } from './index.ts'

Deno.test('fizzBuzz test', () => {
  const result = fizzBuzz(15)
  const expected = 'FizzBuzz'
  assertEquals(result, expected)
})
sh
deno test
running 1 test from ./src/fizz-buzz/index.test.ts
fizzBuzz test ... ok (0ms)

ok | 1 passed | 0 failed (1ms)

Example

ts
import { assertEquals } from 'jsr:@std/assert'
import { fizzBuzz } from './index.ts'

// deno-fmt-ignore
const input: number[] = [
    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, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
    51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
    61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
    71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
    81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
    91, 92, 93, 94, 95, 96, 97, 98, 99, 100
]

// deno-fmt-ignore
const expected: string[] = [
    "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz",
    "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz",
    "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz",
    "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz",
    "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz",
    "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz",
    "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz",
    "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz",
    "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz",
    "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"
]

Deno.test('fizzBuzz test', () => {
  for (let i = 0; i < input.length; i++) {
    const result = fizzBuzz(input[i])
    assertEquals(
      result,
      expected[i],
      `Failed at index ${i}: Expected ${expected[i]} but got ${result}`,
    )
  }
})

Deno.test('fizzBuzz async test', async () => {
  const tests = input.map((num, index) =>
    Promise.resolve().then(() => {
      const result = fizzBuzz(num)
      assertEquals(
        result,
        expected[index],
        `Failed at index ${index}: Expected ${
          expected[index]
        } but got ${result}`,
      )
    })
  )
  await Promise.all(tests)
})
sh
deno test
Check file:///workspaces/deno-test/src/fizz-buzz/index.test.ts
running 2 tests from ./src/fizz-buzz/index.test.ts
fizzBuzz test ... ok (0ms)
fizzBuzz async test ... ok (0ms)

ok | 2 passed | 0 failed (2ms)

Failed

 配列の最後をBuzzからBuzに変更。

Details
deno
sh
Check file:///workspaces/deno-test/src/fizz-buzz/index.test.ts
running 2 tests from ./src/fizz-buzz/index.test.ts
fizzBuzz test ... FAILED (1ms)
fizzBuzz async test ... FAILED (0ms)

 ERRORS 

fizzBuzz test => ./src/fizz-buzz/index.test.ts:32:6
error: AssertionError: Values are not equal: Failed at index 99: Expected Buz but got Buzz


    [Diff] Actual / Expected


-   Buzz
+   Buz


  throw new AssertionError(message);
        ^
    at assertEquals (https://jsr.io/@std/assert/1.0.6/equals.ts:51:9)
    at file:///workspaces/deno-test/src/fizz-buzz/index.test.ts:35:5

fizzBuzz async test => ./src/fizz-buzz/index.test.ts:43:6
error: AssertionError: Values are not equal: Failed at index 99: Expected Buz but got Buzz


    [Diff] Actual / Expected


-   Buzz
+   Buz


  throw new AssertionError(message);
        ^
    at assertEquals (https://jsr.io/@std/assert/1.0.6/equals.ts:51:9)
    at file:///workspaces/deno-test/src/fizz-buzz/index.test.ts:47:7
    at async Promise.all (index 99)
    at async file:///workspaces/deno-test/src/fizz-buzz/index.test.ts:56:3

 FAILURES 

fizzBuzz test => ./src/fizz-buzz/index.test.ts:32:6
fizzBuzz async test => ./src/fizz-buzz/index.test.ts:43:6

FAILED | 0 passed | 2 failed (2ms)

error: Test failed

printf

ts
import { fizzBuzz } from './index.ts'
import { assertEquals } from 'jsr:@std/assert@^1.0.6/equals'

// deno-fmt-ignore
const input: number[] = [
    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, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
    51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
    61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
    71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
    81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
    91, 92, 93, 94, 95, 96, 97, 98, 99, 100
]

// deno-fmt-ignore
const expected: string[] = [
    "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz",
    "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz",
    "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz",
    "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz",
    "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz",
    "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz",
    "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz",
    "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz",
    "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz",
    "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"
]

const testCases = input.map((i, o) => {
  return { input: i, expected: expected[o] }
})

for (const { input, expected } of testCases) {
  Deno.test(`fizzBuzz(${input}) -> "${expected}"`, () => {
    const result = fizzBuzz(input)
    assertEquals(result, expected)
  })
}
Details
sh
deno test
running 100 tests from ./src/fizz-buzz/index.test.ts
fizzBuzz(1) -> "1" ... ok (0ms)
fizzBuzz(2) -> "2" ... ok (0ms)
fizzBuzz(3) -> "Fizz" ... ok (0ms)
fizzBuzz(4) -> "4" ... ok (0ms)
fizzBuzz(5) -> "Buzz" ... ok (0ms)
fizzBuzz(6) -> "Fizz" ... ok (0ms)
fizzBuzz(7) -> "7" ... ok (0ms)
fizzBuzz(8) -> "8" ... ok (0ms)
fizzBuzz(9) -> "Fizz" ... ok (0ms)
fizzBuzz(10) -> "Buzz" ... ok (0ms)
fizzBuzz(11) -> "11" ... ok (0ms)
fizzBuzz(12) -> "Fizz" ... ok (0ms)
fizzBuzz(13) -> "13" ... ok (0ms)
fizzBuzz(14) -> "14" ... ok (0ms)
fizzBuzz(15) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(16) -> "16" ... ok (0ms)
fizzBuzz(17) -> "17" ... ok (0ms)
fizzBuzz(18) -> "Fizz" ... ok (0ms)
fizzBuzz(19) -> "19" ... ok (0ms)
fizzBuzz(20) -> "Buzz" ... ok (0ms)
fizzBuzz(21) -> "Fizz" ... ok (0ms)
fizzBuzz(22) -> "22" ... ok (0ms)
fizzBuzz(23) -> "23" ... ok (0ms)
fizzBuzz(24) -> "Fizz" ... ok (0ms)
fizzBuzz(25) -> "Buzz" ... ok (0ms)
fizzBuzz(26) -> "26" ... ok (0ms)
fizzBuzz(27) -> "Fizz" ... ok (0ms)
fizzBuzz(28) -> "28" ... ok (0ms)
fizzBuzz(29) -> "29" ... ok (0ms)
fizzBuzz(30) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(31) -> "31" ... ok (0ms)
fizzBuzz(32) -> "32" ... ok (0ms)
fizzBuzz(33) -> "Fizz" ... ok (0ms)
fizzBuzz(34) -> "34" ... ok (0ms)
fizzBuzz(35) -> "Buzz" ... ok (0ms)
fizzBuzz(36) -> "Fizz" ... ok (0ms)
fizzBuzz(37) -> "37" ... ok (0ms)
fizzBuzz(38) -> "38" ... ok (0ms)
fizzBuzz(39) -> "Fizz" ... ok (0ms)
fizzBuzz(40) -> "Buzz" ... ok (0ms)
fizzBuzz(41) -> "41" ... ok (0ms)
fizzBuzz(42) -> "Fizz" ... ok (0ms)
fizzBuzz(43) -> "43" ... ok (0ms)
fizzBuzz(44) -> "44" ... ok (0ms)
fizzBuzz(45) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(46) -> "46" ... ok (0ms)
fizzBuzz(47) -> "47" ... ok (0ms)
fizzBuzz(48) -> "Fizz" ... ok (0ms)
fizzBuzz(49) -> "49" ... ok (0ms)
fizzBuzz(50) -> "Buzz" ... ok (0ms)
fizzBuzz(51) -> "Fizz" ... ok (0ms)
fizzBuzz(52) -> "52" ... ok (0ms)
fizzBuzz(53) -> "53" ... ok (0ms)
fizzBuzz(54) -> "Fizz" ... ok (0ms)
fizzBuzz(55) -> "Buzz" ... ok (0ms)
fizzBuzz(56) -> "56" ... ok (0ms)
fizzBuzz(57) -> "Fizz" ... ok (0ms)
fizzBuzz(58) -> "58" ... ok (0ms)
fizzBuzz(59) -> "59" ... ok (0ms)
fizzBuzz(60) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(61) -> "61" ... ok (0ms)
fizzBuzz(62) -> "62" ... ok (0ms)
fizzBuzz(63) -> "Fizz" ... ok (0ms)
fizzBuzz(64) -> "64" ... ok (0ms)
fizzBuzz(65) -> "Buzz" ... ok (0ms)
fizzBuzz(66) -> "Fizz" ... ok (0ms)
fizzBuzz(67) -> "67" ... ok (0ms)
fizzBuzz(68) -> "68" ... ok (0ms)
fizzBuzz(69) -> "Fizz" ... ok (0ms)
fizzBuzz(70) -> "Buzz" ... ok (0ms)
fizzBuzz(71) -> "71" ... ok (0ms)
fizzBuzz(72) -> "Fizz" ... ok (0ms)
fizzBuzz(73) -> "73" ... ok (0ms)
fizzBuzz(74) -> "74" ... ok (0ms)
fizzBuzz(75) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(76) -> "76" ... ok (0ms)
fizzBuzz(77) -> "77" ... ok (0ms)
fizzBuzz(78) -> "Fizz" ... ok (0ms)
fizzBuzz(79) -> "79" ... ok (0ms)
fizzBuzz(80) -> "Buzz" ... ok (0ms)
fizzBuzz(81) -> "Fizz" ... ok (0ms)
fizzBuzz(82) -> "82" ... ok (0ms)
fizzBuzz(83) -> "83" ... ok (0ms)
fizzBuzz(84) -> "Fizz" ... ok (0ms)
fizzBuzz(85) -> "Buzz" ... ok (0ms)
fizzBuzz(86) -> "86" ... ok (0ms)
fizzBuzz(87) -> "Fizz" ... ok (0ms)
fizzBuzz(88) -> "88" ... ok (0ms)
fizzBuzz(89) -> "89" ... ok (0ms)
fizzBuzz(90) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(91) -> "91" ... ok (0ms)
fizzBuzz(92) -> "92" ... ok (0ms)
fizzBuzz(93) -> "Fizz" ... ok (0ms)
fizzBuzz(94) -> "94" ... ok (0ms)
fizzBuzz(95) -> "Buzz" ... ok (0ms)
fizzBuzz(96) -> "Fizz" ... ok (0ms)
fizzBuzz(97) -> "97" ... ok (0ms)
fizzBuzz(98) -> "98" ... ok (0ms)
fizzBuzz(99) -> "Fizz" ... ok (0ms)
fizzBuzz(100) -> "Buzz" ... ok (0ms)

ok | 100 passed | 0 failed (13ms)

Promise.all

ts
import { fizzBuzz } from './index.ts'
import { assertEquals } from 'jsr:@std/assert@^1.0.6/equals'

// deno-fmt-ignore
const input: number[] = [
    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, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
    51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
    61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
    71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
    81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
    91, 92, 93, 94, 95, 96, 97, 98, 99, 100
]

// deno-fmt-ignore
const expected: string[] = [
    "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz",
    "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz",
    "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz",
    "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz",
    "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz",
    "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz",
    "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz",
    "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz",
    "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz",
    "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"
]

const testCases = input.map((i, o) => {
  return { input: i, expected: expected[o] }
})

await Promise.all(
  testCases.map(({ input, expected }) =>
    Deno.test(`fizzBuzz(${input}) -> "${expected}"`, () => {
      const result = fizzBuzz(input)
      assertEquals(result, expected)
    })
  ),
)
Details
sh
deno test
running 100 tests from ./src/fizz-buzz/index.test.ts
fizzBuzz(1) -> "1" ... ok (0ms)
fizzBuzz(2) -> "2" ... ok (0ms)
fizzBuzz(3) -> "Fizz" ... ok (0ms)
fizzBuzz(4) -> "4" ... ok (0ms)
fizzBuzz(5) -> "Buzz" ... ok (0ms)
fizzBuzz(6) -> "Fizz" ... ok (0ms)
fizzBuzz(7) -> "7" ... ok (0ms)
fizzBuzz(8) -> "8" ... ok (0ms)
fizzBuzz(9) -> "Fizz" ... ok (0ms)
fizzBuzz(10) -> "Buzz" ... ok (0ms)
fizzBuzz(11) -> "11" ... ok (0ms)
fizzBuzz(12) -> "Fizz" ... ok (0ms)
fizzBuzz(13) -> "13" ... ok (0ms)
fizzBuzz(14) -> "14" ... ok (0ms)
fizzBuzz(15) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(16) -> "16" ... ok (0ms)
fizzBuzz(17) -> "17" ... ok (0ms)
fizzBuzz(18) -> "Fizz" ... ok (0ms)
fizzBuzz(19) -> "19" ... ok (0ms)
fizzBuzz(20) -> "Buzz" ... ok (0ms)
fizzBuzz(21) -> "Fizz" ... ok (0ms)
fizzBuzz(22) -> "22" ... ok (0ms)
fizzBuzz(23) -> "23" ... ok (0ms)
fizzBuzz(24) -> "Fizz" ... ok (0ms)
fizzBuzz(25) -> "Buzz" ... ok (0ms)
fizzBuzz(26) -> "26" ... ok (0ms)
fizzBuzz(27) -> "Fizz" ... ok (0ms)
fizzBuzz(28) -> "28" ... ok (0ms)
fizzBuzz(29) -> "29" ... ok (0ms)
fizzBuzz(30) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(31) -> "31" ... ok (0ms)
fizzBuzz(32) -> "32" ... ok (0ms)
fizzBuzz(33) -> "Fizz" ... ok (0ms)
fizzBuzz(34) -> "34" ... ok (0ms)
fizzBuzz(35) -> "Buzz" ... ok (0ms)
fizzBuzz(36) -> "Fizz" ... ok (0ms)
fizzBuzz(37) -> "37" ... ok (0ms)
fizzBuzz(38) -> "38" ... ok (0ms)
fizzBuzz(39) -> "Fizz" ... ok (0ms)
fizzBuzz(40) -> "Buzz" ... ok (0ms)
fizzBuzz(41) -> "41" ... ok (0ms)
fizzBuzz(42) -> "Fizz" ... ok (0ms)
fizzBuzz(43) -> "43" ... ok (0ms)
fizzBuzz(44) -> "44" ... ok (0ms)
fizzBuzz(45) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(46) -> "46" ... ok (0ms)
fizzBuzz(47) -> "47" ... ok (0ms)
fizzBuzz(48) -> "Fizz" ... ok (0ms)
fizzBuzz(49) -> "49" ... ok (0ms)
fizzBuzz(50) -> "Buzz" ... ok (0ms)
fizzBuzz(51) -> "Fizz" ... ok (0ms)
fizzBuzz(52) -> "52" ... ok (0ms)
fizzBuzz(53) -> "53" ... ok (0ms)
fizzBuzz(54) -> "Fizz" ... ok (0ms)
fizzBuzz(55) -> "Buzz" ... ok (0ms)
fizzBuzz(56) -> "56" ... ok (0ms)
fizzBuzz(57) -> "Fizz" ... ok (0ms)
fizzBuzz(58) -> "58" ... ok (0ms)
fizzBuzz(59) -> "59" ... ok (0ms)
fizzBuzz(60) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(61) -> "61" ... ok (0ms)
fizzBuzz(62) -> "62" ... ok (0ms)
fizzBuzz(63) -> "Fizz" ... ok (0ms)
fizzBuzz(64) -> "64" ... ok (0ms)
fizzBuzz(65) -> "Buzz" ... ok (0ms)
fizzBuzz(66) -> "Fizz" ... ok (0ms)
fizzBuzz(67) -> "67" ... ok (0ms)
fizzBuzz(68) -> "68" ... ok (0ms)
fizzBuzz(69) -> "Fizz" ... ok (0ms)
fizzBuzz(70) -> "Buzz" ... ok (0ms)
fizzBuzz(71) -> "71" ... ok (0ms)
fizzBuzz(72) -> "Fizz" ... ok (0ms)
fizzBuzz(73) -> "73" ... ok (0ms)
fizzBuzz(74) -> "74" ... ok (0ms)
fizzBuzz(75) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(76) -> "76" ... ok (0ms)
fizzBuzz(77) -> "77" ... ok (0ms)
fizzBuzz(78) -> "Fizz" ... ok (0ms)
fizzBuzz(79) -> "79" ... ok (0ms)
fizzBuzz(80) -> "Buzz" ... ok (0ms)
fizzBuzz(81) -> "Fizz" ... ok (0ms)
fizzBuzz(82) -> "82" ... ok (0ms)
fizzBuzz(83) -> "83" ... ok (0ms)
fizzBuzz(84) -> "Fizz" ... ok (0ms)
fizzBuzz(85) -> "Buzz" ... ok (0ms)
fizzBuzz(86) -> "86" ... ok (0ms)
fizzBuzz(87) -> "Fizz" ... ok (0ms)
fizzBuzz(88) -> "88" ... ok (0ms)
fizzBuzz(89) -> "89" ... ok (0ms)
fizzBuzz(90) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(91) -> "91" ... ok (0ms)
fizzBuzz(92) -> "92" ... ok (0ms)
fizzBuzz(93) -> "Fizz" ... ok (0ms)
fizzBuzz(94) -> "94" ... ok (0ms)
fizzBuzz(95) -> "Buzz" ... ok (0ms)
fizzBuzz(96) -> "Fizz" ... ok (0ms)
fizzBuzz(97) -> "97" ... ok (0ms)
fizzBuzz(98) -> "98" ... ok (0ms)
fizzBuzz(99) -> "Fizz" ... ok (0ms)
fizzBuzz(100) -> "Buzz" ... ok (0ms)

ok | 100 passed | 0 failed (10ms)

expect

ts
import { expect } from 'jsr:@std/expect'
import { fizzBuzz } from './index.ts'

// deno-fmt-ignore
const input: number[] = [
    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, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
    51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
    61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
    71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
    81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
    91, 92, 93, 94, 95, 96, 97, 98, 99, 100
]

// deno-fmt-ignore
const expected: string[] = [
    "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz",
    "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz",
    "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz",
    "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz",
    "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz",
    "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz",
    "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz",
    "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz",
    "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz",
    "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"
]

const testCases = input.map((i, o) => {
  return { input: i, expected: expected[o] }
})

await Promise.all(
  testCases.map(({ input, expected }) =>
    Deno.test(`fizzBuzz(${input}) -> "${expected}"`, () => {
      const result = fizzBuzz(input)
      expect(result).toBe(expected)
    })
  ),
)
Details
sh
deno test
Check file:///workspaces/deno-test/src/fizz-buzz/index.test.ts
running 100 tests from ./src/fizz-buzz/index.test.ts
fizzBuzz(1) -> "1" ... ok (0ms)
fizzBuzz(2) -> "2" ... ok (0ms)
fizzBuzz(3) -> "Fizz" ... ok (0ms)
fizzBuzz(4) -> "4" ... ok (0ms)
fizzBuzz(5) -> "Buzz" ... ok (0ms)
fizzBuzz(6) -> "Fizz" ... ok (0ms)
fizzBuzz(7) -> "7" ... ok (0ms)
fizzBuzz(8) -> "8" ... ok (0ms)
fizzBuzz(9) -> "Fizz" ... ok (0ms)
fizzBuzz(10) -> "Buzz" ... ok (0ms)
fizzBuzz(11) -> "11" ... ok (0ms)
fizzBuzz(12) -> "Fizz" ... ok (0ms)
fizzBuzz(13) -> "13" ... ok (0ms)
fizzBuzz(14) -> "14" ... ok (0ms)
fizzBuzz(15) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(16) -> "16" ... ok (0ms)
fizzBuzz(17) -> "17" ... ok (0ms)
fizzBuzz(18) -> "Fizz" ... ok (0ms)
fizzBuzz(19) -> "19" ... ok (0ms)
fizzBuzz(20) -> "Buzz" ... ok (0ms)
fizzBuzz(21) -> "Fizz" ... ok (0ms)
fizzBuzz(22) -> "22" ... ok (0ms)
fizzBuzz(23) -> "23" ... ok (0ms)
fizzBuzz(24) -> "Fizz" ... ok (0ms)
fizzBuzz(25) -> "Buzz" ... ok (0ms)
fizzBuzz(26) -> "26" ... ok (0ms)
fizzBuzz(27) -> "Fizz" ... ok (0ms)
fizzBuzz(28) -> "28" ... ok (0ms)
fizzBuzz(29) -> "29" ... ok (0ms)
fizzBuzz(30) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(31) -> "31" ... ok (0ms)
fizzBuzz(32) -> "32" ... ok (0ms)
fizzBuzz(33) -> "Fizz" ... ok (0ms)
fizzBuzz(34) -> "34" ... ok (0ms)
fizzBuzz(35) -> "Buzz" ... ok (0ms)
fizzBuzz(36) -> "Fizz" ... ok (0ms)
fizzBuzz(37) -> "37" ... ok (0ms)
fizzBuzz(38) -> "38" ... ok (0ms)
fizzBuzz(39) -> "Fizz" ... ok (0ms)
fizzBuzz(40) -> "Buzz" ... ok (0ms)
fizzBuzz(41) -> "41" ... ok (0ms)
fizzBuzz(42) -> "Fizz" ... ok (0ms)
fizzBuzz(43) -> "43" ... ok (0ms)
fizzBuzz(44) -> "44" ... ok (0ms)
fizzBuzz(45) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(46) -> "46" ... ok (0ms)
fizzBuzz(47) -> "47" ... ok (0ms)
fizzBuzz(48) -> "Fizz" ... ok (0ms)
fizzBuzz(49) -> "49" ... ok (0ms)
fizzBuzz(50) -> "Buzz" ... ok (0ms)
fizzBuzz(51) -> "Fizz" ... ok (0ms)
fizzBuzz(52) -> "52" ... ok (0ms)
fizzBuzz(53) -> "53" ... ok (0ms)
fizzBuzz(54) -> "Fizz" ... ok (0ms)
fizzBuzz(55) -> "Buzz" ... ok (0ms)
fizzBuzz(56) -> "56" ... ok (0ms)
fizzBuzz(57) -> "Fizz" ... ok (0ms)
fizzBuzz(58) -> "58" ... ok (0ms)
fizzBuzz(59) -> "59" ... ok (0ms)
fizzBuzz(60) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(61) -> "61" ... ok (0ms)
fizzBuzz(62) -> "62" ... ok (0ms)
fizzBuzz(63) -> "Fizz" ... ok (0ms)
fizzBuzz(64) -> "64" ... ok (0ms)
fizzBuzz(65) -> "Buzz" ... ok (0ms)
fizzBuzz(66) -> "Fizz" ... ok (0ms)
fizzBuzz(67) -> "67" ... ok (0ms)
fizzBuzz(68) -> "68" ... ok (0ms)
fizzBuzz(69) -> "Fizz" ... ok (0ms)
fizzBuzz(70) -> "Buzz" ... ok (0ms)
fizzBuzz(71) -> "71" ... ok (0ms)
fizzBuzz(72) -> "Fizz" ... ok (0ms)
fizzBuzz(73) -> "73" ... ok (0ms)
fizzBuzz(74) -> "74" ... ok (0ms)
fizzBuzz(75) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(76) -> "76" ... ok (0ms)
fizzBuzz(77) -> "77" ... ok (0ms)
fizzBuzz(78) -> "Fizz" ... ok (0ms)
fizzBuzz(79) -> "79" ... ok (0ms)
fizzBuzz(80) -> "Buzz" ... ok (0ms)
fizzBuzz(81) -> "Fizz" ... ok (0ms)
fizzBuzz(82) -> "82" ... ok (0ms)
fizzBuzz(83) -> "83" ... ok (0ms)
fizzBuzz(84) -> "Fizz" ... ok (0ms)
fizzBuzz(85) -> "Buzz" ... ok (0ms)
fizzBuzz(86) -> "86" ... ok (0ms)
fizzBuzz(87) -> "Fizz" ... ok (0ms)
fizzBuzz(88) -> "88" ... ok (0ms)
fizzBuzz(89) -> "89" ... ok (0ms)
fizzBuzz(90) -> "FizzBuzz" ... ok (0ms)
fizzBuzz(91) -> "91" ... ok (0ms)
fizzBuzz(92) -> "92" ... ok (0ms)
fizzBuzz(93) -> "Fizz" ... ok (0ms)
fizzBuzz(94) -> "94" ... ok (0ms)
fizzBuzz(95) -> "Buzz" ... ok (0ms)
fizzBuzz(96) -> "Fizz" ... ok (0ms)
fizzBuzz(97) -> "97" ... ok (0ms)
fizzBuzz(98) -> "98" ... ok (0ms)
fizzBuzz(99) -> "Fizz" ... ok (0ms)
fizzBuzz(100) -> "Buzz" ... ok (0ms)

ok | 100 passed | 0 failed (7ms)

coverage

Command-line Usage

sh
deno coverage [OPTIONS] [files]...

 deno テストでカバレッジ プロファイルを収集。

sh
deno test --coverage=cov_profile

 レポートを出力。

sh
deno coverage cov_profile
-------------------------------
File      | Branch % | Line % |
-------------------------------
 index.ts |    100.0 |  100.0 |
-------------------------------
 All files |    100.0 |  100.0 |
-------------------------------

 lcov 形式を使用してレポートを作成。

sh
deno coverage --lcov --output=cov.lcov cov_profile/

 lcov から HTML レポートを生成。

sh
genhtml -o html_cov cov.lcov

html_covディレクトリ以下にレポートファイルが生成されます。