Posted at

VS Codeのエクステンションの単体テストを記述する

More than 3 years have passed since last update.


はじめに

generator-codeを使って生成したVisual Studio Codeのエクステンションをテストします(generetor-codeについては以前の記事を参照してください)。


エクステンションの単体テスト


環境の確認

generator-codeでは、Mochaを使用したテスト設定が自動生成されています。そのため、「Debug」ビューで「Launch Tests」を選んで「start」をクリックするだけで、ダミーテストを実行できます。

このとき実行されるのは「test」フォルダ内のソースコードになります。自作の単体テストを記述するには、「test」フォルダ内に任意のファイル名.test.tsと命名したファイルを追加します。


Mochaを使った単体テストの記述

初めに単体テストの全体像を確認しておきましょう。


tabconverter.ts

 public toggleTabSpace() {

let options = window.activeTextEditor.options;
if (options.insertSpaces) {
window.activeTextEditor.options = { tabSize: options.tabSize, insertSpaces: false };
} else {
window.activeTextEditor.options = { tabSize: options.tabSize, insertSpaces: true };
}
}


tabconverter.test.ts

suite("Tabconverter.toggleTabSpace Tests", () => {

// Defines a Mocha unit test
test("toggle", () => {
// Arrange
let options = window.activeTextEditor.options,
defaultInsertSpaces = options.insertSpaces,
defaultTabSize = options.tabSize,
tabconverter = new TabConverter();

// Act
tabconverter.toggleTabSpace();

// Assert
let afterOptions = window.activeTextEditor.options,
afterTabSize = afterOptions.tabSize,
afterInsertSpaces = afterOptions.insertSpaces;
assert.notEqual(defaultInsertSpaces, afterInsertSpaces);
assert.equal(defaultTabSize, afterTabSize);
});
});


テスト対象のtoggleTabSpaceメソッドは、タブキーを押したとき、タブが挿入されるかスペースが挿入されるかを呼び出しの度に切り替えるメソッドです。また、タブキー押下時に挿入されるスペースの数はユーザー設定値がそのまま使われます。

単体テストファイル内には、Mochaを使った単体テスト用のsuiteやtest関数を書きますが、generator-codeが自動生成したextension.test.tsのものをコピペで使いまわせます。そのため、test関数内の単体テストにだけ注力すればよいです。今回の単体テストでは、シンプルにArrrange/Act/Assertの3フェーズで記述しました。

Arrangeフェーズでは最初の状態のエディタの状態取得と、テスト対象メソッドを持つクラス生成をしています。インポートさえしておけば、VS Codeエクステンション用のAPIは単体テストファイルからも参照できます。insertSpacesやtabSizeプロパティは値渡しのようなので、Assert用に実行前の状態を取得して変数に格納しておきました。

Actフェーズではテスト対象のtoggleTabSpaceメソッドを実行しています。

Assertフェーズでは、Mochaのassertオブジェクトを使用した診断を行います。assertオブジェクトには、値が予想値と等しいことを表すequalメソッドなどが含まています。Mochaは初めて使いましたが、ほかの単体テストフレームワークと大枠は似ていますし、VS Codeでインテリセンスが聞くように型定義ファイルも事前に生成されているのでさほど迷わないと思います。今回はtoggleTabSpaceメソッドを実行することで、insertSpacesは変更されているはずのため、notEqualメソッドを使った判定をしています。また、tabSizeは元のままのはずなので、equalメソッドでの判定をしています。


単体テストの実行

環境の確認の節で確認したように、単体テストの実行設定は自動生成されているので、あとは「F5」キーなどで実行するだけです。実行結果はVS Code上のDebug Consoleに表示されるのですぐに確認できます。


参考

Testing Your Extension

Mocha

TabSpacer