1. ホーム
  2. node.js

[解決済み] node.jsモジュールの内部(非exports)関数にアクセスし、テストするには?

2022-04-09 19:44:12

質問

nodejsの内部(つまりエクスポートされていない)関数をテストする方法を見つけようとしています(できればmochaかjasmineを使いたいのですが)。そして、私はアイデアを持っていない

例えば、こんなモジュールがあるとします。

function exported(i) {
   return notExported(i) + 1;
}

function notExported(i) {
   return i*2;
}

exports.exported = exported;

そして、以下のテスト(mocha)。

var assert = require('assert'),
    test = require('../modules/core/test');

describe('test', function(){

  describe('#exported(i)', function(){
    it('should return (i*2)+1 for any given i', function(){
      assert.equal(3, test.exported(1));
      assert.equal(5, test.exported(2));
    });
  });
});

をユニットテストする方法はありますか? notExported 関数は、公開されることを意図していないため、実際にエクスポートすることなく、この関数を使用できますか?

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

その リワイヤ モジュールは、間違いなくその答えです。

以下は、エクスポートされていない関数にアクセスし、Mocha を使ってテストする私のコードです。

application.js:

function logMongoError(){
  console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
}

test.jsです。

var rewire = require('rewire');
var chai = require('chai');
var should = chai.should();


var app = rewire('../application/application.js');


var logError = app.__get__('logMongoError'); 

describe('Application module', function() {

  it('should output the correct error', function(done) {
      logError().should.equal('MongoDB Connection Error. Please make sure that MongoDB is running.');
      done();
  });
});