1. ホーム
  2. javascript

[解決済み] MochaとNode.jsを使ったプライベート関数のユニットテスト

2022-05-01 01:08:18

質問

を使用しています。 モカ Node.jsで書かれたアプリケーションをユニットテストするためです。

モジュールでエクスポートされていない関数をユニットテストすることは可能なのでしょうかね。

でこのように定義された関数がたくさんあるんです。 foobar.js :

function private_foobar1(){
    ...
}

function private_foobar2(){
    ...
}

そして、パブリックとしてエクスポートされたいくつかの機能。

exports.public_foobar3 = function(){
    ...
}

テストケースは以下のような構成になっています。

describe("private_foobar1", function() {
    it("should do stuff", function(done) {
        var stuff = foobar.private_foobar1(filter);
        should(stuff).be.ok;
        should(stuff).....

明らかに、これはうまくいきません。 private_foobar1 はエクスポートされません。

プライベートメソッドをユニットテストする正しい方法は何ですか?Mocha にはそのためのビルトインメソッドがあるのでしょうか?

どのように解決するのですか?

関数がモジュールによってエクスポートされていない場合、モジュール外のテストコードから呼び出すことはできません。これは JavaScript の仕組みによるもので、Mocha 自身はこれを回避することができません。

プライベート関数をテストすることが正しいと判断したいくつかの例では、私は何らかの環境変数を設定し、モジュールがテストセットアップで実行されているかどうかをチェックするようにしています。もしテストセットアップで動作していれば、テスト中に呼び出すことができる追加の関数をエクスポートします。

ここでいう「環境」とは、大まかな意味です。それは process.env などと、モジュールに伝えることができます。このようなことをしなければならないケースは RequireJS という環境で、私は module.config を使用します。