2016-10-12 9 views
0

タイムアウトを15000msに設定した後でも、なぜmochaテストに失敗するのか理解できますか?私はそれがメモリリークなどすることができますが、私はどこでも私のコードでそれを見つけることはできません知っている。私はクロムデバッガを使用し、JSヒープが最大で48MBのメモリを使用していることを確認しました。 (悪くないある?)ここで私がテストだ機能だ、それが何をするんxmlParser.jsNode.js/Javascript:XMLをJSONに解析するテストでタイムアウトが発生するとmochaテストに失敗する

var fs = require('fs'), 
xml2js = require('xml2js'), 
parser = new xml2js.Parser(); 

/** 
* [parse - parses a xml file to json] 
* @param {[string]} filename [name of the file to parse] 
* @param {Function} callback [callback function] 
* @return {[Function]}   [returning callback function] 
*/ 
function parse(filename, callback){ 
    fs.readFile(filename, function(err, data){ 
     if(err){ 
      console.log('cannot read file.'); 
      return callback(err); 
     } else { 
      parser.parseString(data, function(err, result){ 
       if(err) { 
        console.log('cannot parse file.'); 
        return callback(err); 
       } 
       else { 
        return callback(null, result); 
       } 
      }); 
     } 
    }); 
} 

module.exports = { 
    parse 
} 

と呼ばれるファイルには? xmlファイルをJSONに解析します。それと同じくらい簡単です! はここで、私はそれをテストしてる方法です

var assert = require('chai').assert, 
    mocha = require('mocha'), 
    xmlParser = require('../utils/xmlParser.js'), 
    extractInformation = require('../utils/extractInformation.js'); 

//data-structures for parsed XML data (lists) 
var logJSON = [], listJSON = []; 

describe('parse xml files', function(){ 
    this.timeout(150000); 
    it('should parse correctly', function(done){ 
     this.timeout(150000); 
     setTimeout(done, 150000); 
     xmlParser.parse(__dirname + "/../xml/svn_log_test.xml", function(err, log) { 
      if(err) { 
       return done(err); 
       // assert.equal(true, false); 
      } 
      this.logJSON = log["log"]["logentry"]; 
      xmlParser.parse(__dirname + "/../xml/svn_list_test.xml", function(err, list) { 
       if(err) { 
        return done(err); 
        // assert.equal(true, false); 
       } 
       this.listJSON = list["lists"]["list"][0]["entry"]; 
      }); 
     }); 
    }); 
}); 

、あなたは私がいずれかを使用していないことを言う前に、私はありませんはい、今のよう声明を主張します。しかし、それはとにかく通り過ぎるべきですよね? 15000s後にタイムアウトエラーが発生する

+0

JavaScriptで非常に正確ではありませんか? – robertklep

答えて

1

なぜ、setTimoutを14秒に減らそうとしないのですか?

setTimeout(function() { 
    done() 
}, 140000); 

タイマーは、あなたが `this.listJSON`を設定した後に行って呼び出していないしていない理由

+1

ありがとうございます!これは、私の 'this.listJSON'の後にdone()を追加すること(これは@robertklepによると)は私のために解決しました。 – Scrotch

関連する問題