2015-01-20 1 views
2

나는 다음과 같은 간단한 기능이 있습니다쓰기 테스트 케이스

Error: From date (2014/09/13-10:00:00) is after To date (2014/09/12-09:00:00).Enter a valid date range. 

: 나는 그것을 호출하는 경우

var moment = require('moment-timezone'); 

exports.splitIntoDays = function(from,to) { 
    var timeIntervals = []; 
    var interval = {}; 
    var start = moment(from); 
    var end = moment(to); 
    if(start.isAfter(end)) { 
     throw new Error('From date ('+from+') is after To date ('+to+').Enter a valid date range.'); 
    } 
    var initial = start; 
    console.log("Before loop"+initial.format("YYYY/MM/DD-HH:mm:ss")+" "+initial.diff(end,'hours')); 
    while(end.diff(initial,'hours') > 24) { 
     timeIntervals.push({"from" : initial.format("YYYY/MM/DD-HH:mm:ss"), "to" : initial.add(24,'hours').format("YYYY/MM/DD-HH:mm:ss")}); 
     initial = initial.add(1,'hours'); 
    } 
    timeIntervals.push({"from" : initial.format("YYYY/MM/DD-HH:mm:ss"), "to" : end.format("YYYY/MM/DD-HH:mm:ss")}); 
    console.info(JSON.stringify(timeIntervals)); 
    return timeIntervals; 
} 

그래서, splitIntoDays('2014/09/13-10:00:00','2014/09/12-09:00:00'), 나는 다음과 같은 응답을받을를 나는 모카 (Mocha)와 차이 (Chai)를 사용하여 다음과 같은 시험을 썼다 :

var expect = require("chai").expect; 
var utils = require("../Utils.js"); 

describe("Utils", function(){ 
    describe("#splitIntoDays()", function(){ 
     it("equal", function() { 
      var results = utils.splitIntoDays('2014/09/13-10:00:00','2014/09/12-09:00:00'); 
      expect(utils.splitIntoDays('2014/09/13-10:00:00','2014/09/12-09:00:00')).to.throw(new Error('From date (2014/09/13-10:00:00) is after To date (2014/09/12-09:00:00).Enter a valid date range.')); 
     }); 
    }); 
}); 

그러나 이것은 실패했다. 실수를 지적하는 데 나를 도울 수 있습니까?

describe("Utils", function(){ 
    describe("#splitIntoDays()", function(){ 
     var error = new Error('From date (2014/09/13-10:00:00) is after To date (2014/09/12-09:00:00).Enter a valid date range.'); 
     it("equal", function() { 
      expect(function(){ 
       utils.splitIntoDays('2014/09/13-10:00:00','2014/09/12-09:00:00'); 
      }).to.throw(error); 
     }); 
    }); 
}); 

그리고 난 다음 무엇입니까 : 당신은 여기에 대한 답을 찾을 수 있습니다

AssertionError: expected [Function] to throw 'Error: From date (2014/09/13-10:00:00) is after To date (2014/09/12-09:00:00).Enter a valid date range.' but 'Error: From date (2014/09/13-10:00:00) is after To date (2014/09/12-09:00:00).Enter a valid date range.' was thrown 
+0

[모카/차이가 발생하지 에러를 잡기 expect.to.throw]의 중복 가능성 (http://stackoverflow.com/questions/21587122/mocha-chai-expect-to-throw-not-catching- thrown-errors) – Louis

답변

2

: Mocha/Chai expect.to.throw not catching thrown errors 내가 노력

는뿐만 아니라 다음과 같은 시도했다.

기본적으로 expect() 함수를 전달해야합니다. 이제 결과를 전달하고 있습니다.

편집 : 효과가있는 내 의견의 예제를 붙여 넣기.

var expect = require('chai').expect; 

describe('test', function(){ 

    var utils = { 
     splitIntoDays : function(from, to){ 
      throw new Error('Invalid date range.'); 
     } 
    } 

    it('throws errors', function(){ 
     expect(utils.splitIntoDays.bind(utils, '2014/09/13-10:00:00', '2014/09/12-09:00:00')).to.throw(Error, 'Invalid date range.'); 
    }); 

}); 
+0

질문의 마지막 부분을 확인해 보았습니다. 그러나 이것은 도움이되지 않습니다. –

+0

당신은'expect (utils.splitIntoDays.bind (utils, '2014/09/13-10 : 00 : 00', '2014/09/12-09 : 00 : 00' ? (오류 메시지 확인을 추가 할 수도 있습니다) – juunas

+0

또한'새로운 오류 (...)'를'오류'로 전환 할 수 있습니까? – juunas

관련 문제