2017-12-01 11 views
0

모카 스크립트에서 try/catch와 관련된 문제가 있습니다. 테스트 중 일부는 실패하지만 모카는 "모두 통과했습니다"라고 표시됩니다. 아래는 내 테스트 스크립트 파일로이 문제를 해결하는 데 도움이됩니다. 이 코드에서는 배열의 입력 문자열을 URL에 게시하고 XML 응답을 기다리고 있습니다. 당신이 완료() 메소드가 아직 호출되는 오류를 잡아 약속을 확인할 때 정말 모든 테스트를 통과합니다, JSON 문자열을 XML 응답을 구문 분석 Xml2js 모듈을 사용하고모카 테스트 스크립트에서 try/catch 블록이 오류를 삼키고 있습니다

var expect = require('chai').expect; 
var request = require('supertest'); 
var xml2js = require('xml2js'); 
var PrettyError = require('pretty-error'); 
var pe = new PrettyError(); 


var async = require('async'); 
var fs = require('fs'); 
var parser = new xml2js.Parser(); 
var build = require('./config').Build; 

var build_url = build.Environment[build.Type].HostUrl; 

    var inputArray1 = []; 

    describe('Verifying Incoming post output response', function() { 
    var index = 0; 
    validateFields(index); 

    function validateFields(index) { 
     var input = inputArray1[index]; 

     var actualInputArray = input.split(","); 

     describe(actualInputArray[0], function() { 
     it(actualInputArray[1], function(done) { 
     request(build_url).post('/lead') 
     .send(actualInputArray[2]) 
     .end(function(err, res) { 
      var resxml = res.text; 
      console.log("resxml", resxml); 
      parser.parseString(resxml, function(err, result) { 
      try { 
      expect(result['Header']['RESULT']).to.deep.equal([actualInputArray[3]]); 
      expect(result['Header']['STATUS_CODE']).to.deep.equal([actualInputArray[4]]); 
      expect(result['Header']['MESSAGE']).to.deep.equal([actualInputArray[5]]); 

      } catch (err) { 
      console.log(pe.render(err.message)); 

      } 
      index = index + 1; 
      if (index < inputArray1.length) { 
      validateFields(index); 
      } 

      done(); 
      }); 
     }); 
     }).timeout(5000); 
     }); 
    } 
    }); 

답변

0

기대와 XML 하위 요소를 비교하고 어쨌든.

done(new Error("Your error message"));을 캐치에 넣고 오류가 발생하면 테스트를 실패하십시오.

+0

else 블록 다음에 done()을 제거하고 ** done (새 오류 (pe.render (err.message))); ** catch 블록에서. 이제 mocha가 총 합격 및 실패 횟수를 올바르게 표시하고 있습니다. **하지만 시간 초과 오류가 발생했습니다 ** – Aman

+0

catch에서 done()을 호출하면 성공할 경우 약속이 해결되지 않고 시간 초과로 끝납니다. –