Node.js 使用Mocha和Chai编写带错误函数的测试用例

Node.js 使用Mocha和Chai编写带错误函数的测试用例,node.js,mocha.js,chai,Node.js,Mocha.js,Chai,我有一个简单的函数: 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

我有一个简单的函数:

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;
}
因此,如果我称之为,
splitintodies('2014/09/13-10:00:00','2014/09/12-09:00:00')
,我会得到以下响应:

Error: From date (2014/09/13-10:00:00) is after To date (2014/09/12-09:00:00).Enter a valid date range.
我使用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

您可以在此处找到答案:

基本上,您必须传递一个函数才能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.');
    });

});

如果你检查问题的最后一部分,我也试过了。但这没有帮助。您是否尝试过
expect(utils.splitintodies.bind(utils,'2014/09/13-10:00:00','2014/09/12-09:00:00')。抛出(错误)
?(您也可以添加错误消息检查)也可以尝试将
新错误(…)
切换到
错误
?尝试上述操作后,我收到以下错误:
断言错误:预期[函数]抛出“错误:从日期(2014/09/13-10:00:00)晚于日期(2014/09/12-09:00:00)。输入一个有效的日期范围。'but'错误:从日期(2014/09/13-10:00:00)在日期(2014/09/12-09:00:00)之后。输入一个有效的日期范围。'but'被抛出。
以下操作对我有效:
var expect=require('chai')。expect;description.only('test',function(){var utils={splitintodies:function(from,to){throw new Error('Invalid date range');}}it('throws errors',function(){expect(utils.splitintodies.bind(utils,'2014/09/13-10:00:00','2014/09/12-09:00:00')).to.throw(Error,'Invalid date range.');})可能重复的