2016-05-13 18 views
0

私は口ひげテンプレートファイルをロードするモジュールを持っています。私はこのための単体テストを書いています。私はモカ、チャイを使用して再配線しようとしています。私はテンプレートを使用して何かをするために口ひげを使用して、コールバック関数でnode.jsで単体テストを書く最良の方法は何ですか?

var winston = require('winston'); 
var fs = require('fs'); 
var config = require('./config.js'); 
exports.logger = new winston.Logger({ 
    transports: [ 
     new winston.transports.File(config.logger_config.file_transport), 
     new winston.transports.Console(config.logger_config.console_transport) 
    ], 
    exitOnError: false 
}); 
exports.readTemplateFile = function(templateFile, callback) { 
     fs.readFile(config.base_directory + templateFile + '.tpl.xml', 'utf8', function (err, data) { 
      if (err) { 
       logger.error('Could not read template ' + templateFile + ': ' + err); 
      } 
      callback(data); 
     }); 
    }; 

は、ここに私のmodule.jsです。 これをテストする最良の方法は何ですか?

多分私はfs.readFileを再配線する必要がありますか?テストが実行されるときにファイルがそこに存在しないため。 Winstonのロガーは、私がモカのテストでこれをインポートすると初期化されるかどうかわからない興味深い部分です。私の最初のテストは、ロガーが未定義であることを示しています。

答えて

3

ユニットテストの最も重要な原理の1つは、非常に小さなコードのテストです。これを実現するには、テストコードに属さない関数(この場合はreadFileとlogger.error)への呼び出しを疑似的に擬似またはスタブする必要があります。提供されたコードのためには、3つのテストケースを作ることができます。

  • がerrはあなたのコールバック関数があるべき

適切な引数でコールバック関数を呼び出し

  • 存在する場合、エラーを呼び出し、適切な引数
  • とreadFileのを呼び出しますこのコードの外で、例えばパラメータとして偽データを提供することによって:

    define('Some test',() => { 
        it('should return true',() => { 
        expect(callbackFunction('fakeData').to.be.ok); 
        }); 
    }); 
    
  • 関連する問題