LoginSignup
4
5

More than 5 years have passed since last update.

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

Posted at

はじめに

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

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

環境の確認

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

LaunchTests.png

このとき実行されるのは「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に表示されるのですぐに確認できます。

debugconsole.png

参考

Testing Your Extension
Mocha
TabSpacer

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5