Deno のテストをいい感じに Vim で実行できるように環境構築。

vim-test の導入

テスト実行には、以下のプラグインが有名そうだったので導入。

インストールは dein.vim だとこんな感じ。

[[plugins]]
repo = 'vim-test/vim-test'
depends = ['neoterm']
on_cmd = ['TestNearest', 'TestFile', 'TestSuite', 'TestLast', 'TestVisit']
hook_add = '''
nnoremap <silent> <space>tn <cmd>TestNearest<cr>
nnoremap <silent> <space>tf <cmd>TestFile<cr>
nnoremap <silent> <space>ts <cmd>TestSuite<cr>
nnoremap <silent> <space>tl <cmd>TestLast<cr>
nnoremap <silent> <space>tg <cmd>TestVisit<cr>

let test#strategy = {
	\ 'nearest': 'neoterm',
	\ 'file'   : 'neoterm',
	\ 'suite'  : 'neoterm',
	\ }

let test#javascript#denotest#options = {
    \ 'all': '--no-check --unstable -A'
    \ }
'''

[[plugins]]
repo = 'kassio/neoterm'
on_cmd = ['Tnew']
hook_add = '''
let g:neoterm_autoinsert = 1
let g:neoterm_autoscroll = 1
let g:neoterm_default_mod = 'botright'
let g:neoterm_size = 10
'''

vim-test だと、 strategy と呼ばれるものでテスト実行に何を使用するか選ぶことができる。 色々試した結果、 kassio/neoterm が良さそうだったのでこれを使用中。 見え方とか変わるくらいやから正直これはなんでもいいと思う。 何が選べるかは vim-test/vim-test: strategies を参照。

Deno test 構成

Deno のテストでは組み込みの Deno.test 関数があるのでそれが使用できる。 基本的に実装が mod.ts に記載してあるとすると、テストは mod_test.ts に記載するっぽい。 (後ろに _test をつける。)

かんたんに例を書くとこんな感じ。

  • mod.ts
export const getTrue = (): boolean => {
  return true;
};

export const add = (x: number, y: number): number => {
  return x + y;
};
  • mod_test.ts
import {
  assert,
  assertEquals,
} from "https://deno.land/std@0.95.0/testing/asserts.ts";
import { add, getTrue } from "./mod.ts";

Deno.test("getTrue test", () => {
  assert(getTrue());
});

Deno.test("add test", () => {
  const expected = 2;
  const actual = add(1, 1);
  assertEquals(actual, expected);
});

mod_test.ts を開いて、 Deno.test("getTrue") の付近にカーソルがある状態で <space>tn を押下すると、以下のように getTrue のみのテストが実行される。

TestNearest

<space>tf を押下すると、以下のように mod_test.ts のすべてのテストが実行される。

TestFile

べんり。


参考