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
に変更してみる。
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
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
ディレクトリ以下にレポートファイルが生成されます。